首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Logback消息转到单个记录器

将Logback消息转到单个记录器
EN

Stack Overflow用户
提问于 2022-09-21 15:34:25
回答 2查看 185关注 0票数 0

我正面临着Apache NiFi日志记录方面的问题。NiFi是用Java编写的,并使用logback。

似乎所有的日志消息都以某种方式转移到了org.apache.nifi.StdOut日志记录器。下面是一个写入org.apache.nifi.StdOut的日志消息示例,但是应该已经到了名为org.eclipse.jetty.annotations.AnnotationParser的记录器那里

2022-09-21 14:21:17,316 INFO [NiFi logging handler] org.apache.nifi.StdOut 14:21:17.316 [NiFi Web Server-22] DEBUG org.eclipse.jetty.annotations.AnnotationParser - Scanning class from jar file:///opt/nifi/work/jetty/nifi-standard-content-viewer-1.17.0.war/webapp/WEB-INF/lib/avro-1.11.0.jar!/org/apache/avro/SchemaBuilder$FieldBuilder.class->org/apache/avro/SchemaBuilder$FieldBuilder.class[0]

为什么所有的logback日志消息都被发送到org.apache.nifi.StdOut**?**,为什么logback不将日志消息发送给批准的记录器?

作为参考,我正在一个Docker容器中运行NiFi。(也许这影响了标准?)

下面是正在使用的logback.xml配置:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook" />

    <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
        <resetJUL>true</resetJUL>
    </contextListener>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
        </encoder>
    </appender>

    <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.processors.standard.LogMessage" 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.NettyServerCnxnFactory" 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.nifi.controller.reporting.LogComponentStatuses" 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="org.springframework" level="ERROR"/>

    <!-- Suppress non-error messages due to known warning about redundant path annotation (NIFI-574) -->
    <logger name="org.glassfish.jersey.internal.Errors" level="ERROR"/>

    <!-- Suppress non-error messages due to Jetty AnnotationParser emitting a large amount of WARNS. Issue described in NIFI-5479. -->
    <logger name="org.eclipse.jetty.annotations.AnnotationParser" level="ERROR"/>

    <!-- Suppress non-error messages from SSHJ which was emitting large amounts of INFO logs by default -->
    <logger name="net.schmizz.sshj" level="WARN" />
    <logger name="com.hierynomus.sshj" level="WARN" />

    <!-- Suppress non-error messages from SMBJ which was emitting large amounts of INFO logs by default -->
    <logger name="com.hierynomus.smbj" level="WARN" />

    <!-- Suppress non-error messages from AWS KCL which was emitting large amounts of INFO logs by default -->
    <logger name="com.amazonaws.services.kinesis" level="WARN" />

    <!-- Suppress non-error messages from Apache Atlas which was emitting large amounts of INFO logs by default -->
    <logger name="org.apache.atlas" level="WARN" />

    <logger name="org.apache.nifi.web.security.requests" level="INFO" />

    <!--
        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" />
    <logger name="org.apache.nifi.web.api.config" level="INFO" />
    <logger name="org.apache.nifi.authorization" level="INFO" />
    <logger name="org.apache.nifi.cluster.authorization" level="INFO" />
    <logger name="org.apache.nifi.web.api.AccessResource" level="INFO" />
    <logger name="org.springframework.security.saml.log" level="WARN" />
    <logger name="org.opensaml" level="WARN" />
    <logger name="org.apache.nifi.web.server.RequestLog" level="INFO" />
    <logger name="org.apache.nifi.bootstrap" level="INFO" />
    <logger name="org.apache.nifi.bootstrap.Command" level="INFO" />

    <logger name="org.apache.nifi.StdOut" level="INFO" />
    <logger name="org.apache.nifi.StdErr" level="INFO" />

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

</configuration>
EN

回答 2

Stack Overflow用户

发布于 2022-09-30 01:12:38

在我看来,StdOut日志程序似乎是将所有记录器的格式输出到他们所记录的消息中,为什么不尝试只为StdOut和StdErr强制使用不同的附件呢?

在您的最后一个记录器中,更改附录:

代码语言:javascript
复制
<logger name="org.apache.nifi.StdOut" level="INFO" additivity="false">
    <appender-ref ref="PLAIN" />
</logger>

<logger name="org.apache.nifi.StdErr" level="INFO" additivity="false">
    <appender-ref ref="PLAIN" />
</logger>

并添加虚拟模式附录程序:

代码语言:javascript
复制
<appender name="PLAIN">
    <encoder>
        <pattern>%msg%n</pattern>
    </encoder>
</appender>

我相信这应该能起作用

票数 1
EN

Stack Overflow用户

发布于 2022-10-04 02:31:10

配置设置不好。在这种情况下,您可以设置为:

代码语言:javascript
复制
<logger name="org.eclipse.jetty.annotations.AnnotationParser" level="ERROR"/ **additivity=false**>
  <appender-ref ref="CONSOLE" />
</logger>

您可能想要指定除了控制台附录之外的附加程序,请在这里找到更多的附录:文件附录

为什么日志模式会出现两次,以及为什么消息被发送到根记录器而不是指定的记录器?他们其实是同一个问题。在您的记录器配置中,您忽略了appender,因此只有root记录器才是可用的。

默认情况下,日志消息被发送到指定的记录器/appender和父记录器/appender,如果希望日志发送到指定的记录器,则可以在logger配置中设置additivity=false。如果未指定logger config,则其可加性= true。

logback记录器可加性

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73803470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档