2017-06-07 111 views
1

NiFi 1.2.0單獨的日誌文件

需要創建一個單獨的日誌文件,比方說,customprocessor.log除了通過NiFi創建的app.log文件。

我經歷了一些有趣的,現有的線程,但是,我無法弄清楚如何使它在代碼中工作。

以下是現有logback.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration scan="true" scanPeriod="30 seconds"> 
    <contextListener> 
     <resetJUL>true</resetJUL> 
    </contextListener> 
    <appender name="APP_FILE"> 
     <file>/var/log/nifi/nifi-app.log</file> 
     <rollingPolicy> 
      <!-- 
           For daily rollover, use 'app_%d.log'. 
       For hourly rollover, use 'app_%d{yyyy-MM-dd_HH}.log'. 
       To GZIP rolled files, replace '.log' with '.log.gz'. 
       To ZIP rolled files, replace '.log' with '.log.zip'. 
      --> 
      <fileNamePattern>/var/log/nifi/archive/nifi-app_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy> 
       <maxFileSize>100MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
      <!-- keep 30 log files worth of history --> 
      <maxHistory>3</maxHistory> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> 
     </encoder> 
    <immediateFlush>true</immediateFlush> 
    </appender> 
    <appender name="USER_FILE"> 
     <file>/var/log/nifi/nifi-user.log</file> 
     <rollingPolicy> 
      <!-- 
           For daily rollover, use 'user_%d.log'. 
       For hourly rollover, use 'user_%d{yyyy-MM-dd_HH}.log'. 
       To GZIP rolled files, replace '.log' with '.log.gz'. 
       To ZIP rolled files, replace '.log' with '.log.zip'. 
      --> 
      <fileNamePattern>/var/log/nifi/archive/nifi-user_%d.log</fileNamePattern> 
      <!-- keep 30 log files worth of history --> 
      <maxHistory>3</maxHistory> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> 
     </encoder> 
    </appender> 
    <appender name="BOOTSTRAP_FILE"> 
     <file>/var/log/nifi/nifi-bootstrap.log</file> 
     <rollingPolicy> 
      <!-- 
       For daily rollover, use 'user_%d.log'. 
       For hourly rollover, use 'user_%d{yyyy-MM-dd_HH}.log'. 
       To GZIP rolled files, replace '.log' with '.log.gz'. 
       To ZIP rolled files, replace '.log' with '.log.zip'. 
      --> 
      <fileNamePattern>/var/log/nifi/archive/nifi-bootstrap_%d.log</fileNamePattern> 
      <!-- keep 5 log files worth of history --> 
      <maxHistory>5</maxHistory> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> 
     </encoder> 
    </appender> 
    <appender name="CONSOLE"> 
     <encoder> 
      <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> 
     </encoder> 
    </appender> 
    <!-- valid logging levels: TRACE, DEBUG, INFO, WARN, ERROR --> 
    <logger name="org.apache.nifi" level="INFO"/> 
    <logger name="org.apache.nifi.processors" level="WARN"/> 
    <logger name="org.apache.nifi.processors.standard.LogAttribute" level="INFO"/> 
    <logger name="org.apache.nifi.controller.repository.StandardProcessSession" level="WARN" /> 
    <logger name="org.apache.zookeeper.ClientCnxn" level="ERROR" /> 
    <logger name="org.apache.zookeeper.server.NIOServerCnxn" level="ERROR" /> 
    <logger name="org.apache.zookeeper.server.NIOServerCnxnFactory" level="ERROR" /> 
    <logger name="org.apache.zookeeper.server.quorum" level="ERROR" /> 
    <logger name="org.apache.zookeeper.ZooKeeper" level="ERROR" /> 
    <logger name="org.apache.zookeeper.server.PrepRequestProcessor" level="ERROR" /> 
    <logger name="org.apache.calcite.runtime.CalciteException" level="OFF" /> 
    <logger name="org.apache.curator.framework.recipes.leader.LeaderSelector" level="OFF" /> 
    <logger name="org.apache.curator.ConnectionState" level="OFF" /> 
    <!-- Logger for managing logging statements for nifi clusters. --> 
    <logger name="org.apache.nifi.cluster" level="INFO"/> 
    <!-- Logger for logging HTTP requests received by the web server. --> 
    <logger name="org.apache.nifi.server.JettyServer" level="INFO"/> 
    <!-- Logger for managing logging statements for jetty --> 
    <logger name="org.eclipse.jetty" level="INFO"/> 
    <!-- Suppress non-error messages due to excessive logging by class or library --> 
    <logger name="com.sun.jersey.spi.container.servlet.WebComponent" level="ERROR"/> 
    <logger name="com.sun.jersey.spi.spring" level="ERROR"/> 
    <logger name="org.springframework" level="ERROR"/> 
    <!-- Suppress non-error messages due to known warning about redundant path annotation (NIFI-574) --> 
    <logger name="com.sun.jersey.spi.inject.Errors" level="ERROR"/> 
    <!-- 
     Logger for capturing user events. We do not want to propagate these 
     log events to the root logger. These messages are only sent to the 
     user-log appender. 
    --> 
    <logger name="org.apache.nifi.web.security" level="INFO" additivity="false"> 
     <appender-ref ref="USER_FILE"/> 
    </logger> 
    <logger name="org.apache.nifi.web.api.config" level="INFO" additivity="false"> 
     <appender-ref ref="USER_FILE"/> 
    </logger> 
    <logger name="org.apache.nifi.authorization" level="INFO" additivity="false"> 
     <appender-ref ref="USER_FILE"/> 
    </logger> 
    <logger name="org.apache.nifi.cluster.authorization" level="INFO" additivity="false"> 
     <appender-ref ref="USER_FILE"/> 
    </logger> 
    <logger name="org.apache.nifi.web.filter.RequestLogger" level="INFO" additivity="false"> 
     <appender-ref ref="USER_FILE"/> 
    </logger> 
    <!-- 
     Logger for capturing Bootstrap logs and NiFi's standard error and standard out. 
    --> 
    <logger name="org.apache.nifi.bootstrap" level="INFO" additivity="false"> 
     <appender-ref ref="BOOTSTRAP_FILE" /> 
    </logger> 
    <logger name="org.apache.nifi.bootstrap.Command" level="INFO" additivity="false"> 
     <appender-ref ref="CONSOLE" /> 
     <appender-ref ref="BOOTSTRAP_FILE" /> 
    </logger> 
    <!-- Everything written to NiFi's Standard Out will be logged with the logger org.apache.nifi.StdOut at INFO level --> 
    <logger name="org.apache.nifi.StdOut" level="INFO" additivity="false"> 
     <appender-ref ref="BOOTSTRAP_FILE" /> 
    </logger> 
    <!-- Everything written to NiFi's Standard Error will be logged with the logger org.apache.nifi.StdErr at ERROR level --> 
    <logger name="org.apache.nifi.StdErr" level="ERROR" additivity="false"> 
     <appender-ref ref="BOOTSTRAP_FILE" /> 
    </logger> 
    <root level="DEBUG"> 
     <appender-ref ref="APP_FILE"/> 
    </root> 
</configuration> 

現在,我可以添加一個新的appender自定義日誌文件:

<!-- Start : Separate log file for custom processor --> 
<appender name="CUSTOM_FILE"> 
     <file>/var/log/nifi/custom-processor.log</file> 
     <rollingPolicy> 
      <!-- 
           For daily rollover, use 'app_%d.log'. 
       For hourly rollover, use 'app_%d{yyyy-MM-dd_HH}.log'. 
       To GZIP rolled files, replace '.log' with '.log.gz'. 
       To ZIP rolled files, replace '.log' with '.log.zip'. 
      --> 
      <fileNamePattern>/var/log/nifi/archive/custom-processor_%d{yyyy-MM-dd_HH}.%i.log</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicy> 
       <maxFileSize>100MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
      <!-- keep 30 log files worth of history --> 
      <maxHistory>3</maxHistory> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> 
     </encoder> 
    <immediateFlush>true</immediateFlush> 
    </appender> 
<!-- End : Separate log file for custom processor --> 



<!-- Start : Separate log file for custom processor --> 
    <logger name="com.nifi.CustomLog" level="DEBUG" additivity="false"> 
     <appender-ref ref="CUSTOM_FILE" /> 
    </logger> 
    <!-- End : Separate log file for custom processor --> 

我有以下問題:

  1. 我正在添加的條目是否正確
  2. 在代碼中,我使用下面的代碼片段獲取根日誌記錄器,但是,我沒有找到一個方法/構造函數來在代碼中獲取我的自定義日誌記錄器 ,我該怎麼做?

    import org.apache.nifi.logging.ComponentLog; .. ComponentLog logger = getLogger(); logger.debug(「...」);

回答

2

我有定製的處理器使用類名稱:org.apache.nifi.processors.groovyx.ExecuteGroovyScript

爲了得到記錄我使用this.getLogger()

在這種情況下,添加以下配置conf/logback.xml將創建一個單獨的文件logs/x.log只有來自我的處理器的日誌會出現。

<appender name="X_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <file>${org.apache.nifi.bootstrap.config.log.dir}/x.log</file> 
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
     <fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/x_%d.log</fileNamePattern> 
     <maxHistory>30</maxHistory> 
    </rollingPolicy> 
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> 
     <pattern>%date %level [%thread] %logger{40} %msg%n</pattern> 
    </encoder> 
</appender> 
<logger name="org.apache.nifi.processors.groovyx.ExecuteGroovyScript" level="INFO" > 
    <appender-ref ref="X_FILE"/> 
</logger> 

注意的是,在記錄儀的定義應該有你的處理器的類名

您也可以定義軟件包的名稱(或父包名稱)作爲記錄器名稱來覆蓋位於該包裝的多個處理器:

<logger name="org.apache.nifi.processors.groovyx" level="INFO" > 
    <appender-ref ref="X_FILE"/> 
</logger> 

在這種情況下org.apache.nifi.processors.groovyx包 的所有類別和所有子包都將被記錄到X_FILE記錄。

+0

效果很好。也許我有點困惑,但有沒有辦法避免記錄器中的類名,而是允許處理器類'查找'這個特定的記錄器?這將使幾個處理器共享日誌文件... –

+1

我添加了對軟件包的描述 – daggett