2016-04-08 5 views
0

Wie kann ProcessLog in einem ExecuteScript-Prozessor am besten genutzt werden? Ich habe geplant, meinem groovigen ExecuteScript eine Protokollierung hinzuzufügen, falls bei der Verarbeitung ein Fehler auftritt. Das Hinzufügen des Protokolls ist jedoch fehlgeschlagen. Wahrscheinlich etwas offensichtlich übersehen.ExecuteScript ProcessLog

Code Snippet:

import org.apache.commons.io.IOUtils 
import java.nio.charset.* 
import com.google.gson.JsonObject 
import com.google.gson.JsonParser 
import java.time.Instant 
import java.time.LocalDateTime 
import java.time.ZoneId 
import org.apache.nifi.logging.ProcessorLog; 

def flowFile = session.get() 
if(!flowFile) return 
def logger = getLogger(); 

Fehler

016-04-07 17:13:51,146 ERROR [Timer-Driven Process Thread-6] o.a.nifi.processors.script.ExecuteScript 
org.apache.nifi.processor.exception.ProcessException: javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getLogger() is applicable for argument types:() values: [] 
Possible solutions: getContext() 
     at org.apache.nifi.processors.script.ExecuteScript.onTrigger(ExecuteScript.java:205) ~[nifi-scripting-processors-0.5.1.jar:0.5.1] 
     at org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1139) [nifi-framework-core-0.5.1.jar:0.5.1] 
     at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:139) [nifi-framework-core-0.5.1.jar:0.5.1] 
     at org.apache.nifi.controller.tasks.ContinuallyRunProcessorTask.call(ContinuallyRunProcessorTask.java:49) [nifi-framework-core-0.5.1.jar:0.5.1] 
     at org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:124) [nifi-framework-core-0.5.1.jar:0.5.1] 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_05] 
     at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [na:1.8.0_05] 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [na:1.8.0_05] 
     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [na:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_05] 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_05] 
     at java.lang.Thread.run(Thread.java:745) [na:1.8.0_05] 
Caused by: javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingMethodException: No signature of method: org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getLogger() is applicable for argument types:() values: [] 
+0

Sie nicht brauchen, um entweder eine Instanz von Logger zu erstellen oder eine statische 'getInstance()' Methode aufrufe? –

Antwort

1

Ich glaube ExecuteScript drei Objekte zur Verfügung stellt:

  • Sitzung
  • Kontext
  • log

Also ich denke, Sie in der Lage sein sollen, einfach nicht:

log.error("my message") 
+0

Das war es. Danke Byran. – scarpacci

Verwandte Themen