在Nifi登录中创建自定义日志文件时出错

时间:2020-10-21 15:40:15

标签: java apache-nifi logback

我正在尝试为我在Nifi中的流程创建自定义日志文件;实现我想使用回退过滤器。

在我的logback.conf中,添加了一个名为LLAB_FILE的新附加程序,该附加程序按其内容过滤了日志消息:

<appender name="LLAB_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${org.apache.nifi.bootstrap.config.log.dir}/llab-transform.log</file>
    <filter class="ch.qos.logback.core.filter.EvaluatorFilter">      
      <evaluator>
        <expression>return message.contains("LLAB_TRANSFORM");</expression>
      </evaluator>
      <OnMismatch>DENY</OnMismatch>
      <OnMatch>ACCEPT</OnMatch>
    </filter>
    <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
        <fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/llab-transform_%d.%i.log</fileNamePattern>
        <maxFileSize>100MB</maxFileSize>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <immediateFlush>true</immediateFlush>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>%date~%level~%msg%n</pattern>
    </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="LLAB_FILE"/>
</root>

但是,当Nifi启动时,此配置会出现以下错误:

Failed to instantiate SLF4J LoggerFactory
Reported exception:
java.lang.NoClassDefFoundError: org/codehaus/janino/ScriptEvaluator
        at ch.qos.logback.core.boolex.JaninoEventEvaluatorBase.start(JaninoEventEvaluatorBase.java:57)
        at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161)
        at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
        at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
        at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
        at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
        at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
        at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
        at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362)
        at org.apache.nifi.bootstrap.RunNiFi.<init>(RunNiFi.java:134)
        at org.apache.nifi.bootstrap.RunNiFi.main(RunNiFi.java:231)
Caused by: java.lang.ClassNotFoundException: org.codehaus.janino.ScriptEvaluator
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
        ... 20 more
Exception in thread "main" java.lang.NoClassDefFoundError: org/codehaus/janino/ScriptEvaluator
        at ch.qos.logback.core.boolex.JaninoEventEvaluatorBase.start(JaninoEventEvaluatorBase.java:57)
        at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:161)
        at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
        at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
        at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
        at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
        at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
        at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
        at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
        at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
        at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
        at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
        at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
        at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:417)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:362)
        at org.apache.nifi.bootstrap.RunNiFi.<init>(RunNiFi.java:134)
        at org.apache.nifi.bootstrap.RunNiFi.main(RunNiFi.java:231)
Caused by: java.lang.ClassNotFoundException: org.codehaus.janino.ScriptEvaluator
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:602)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)

我该如何解决?我不想处理日志引发nifi的流。

谢谢, 温度

1 个答案:

答案 0 :(得分:0)

http://logback.qos.ch/manual/filters.html#JaninoEventEvaluator

JaninoEventEvaluator需要Janino library

请参阅设置文档的corresponding section


实际上,任何评估者都需要附加库