当前位置: 首页 > 知识库问答 >
问题:

log4j2外部库将日志记录到单独的文件中

贺轶
2023-03-14

我使用带有路由附加器和包装器的log4j2xml配置。我将传递不同的appender,以记录项目不同部分的不同文件。我的配置看起来像这样。

<Configuration status="WARN">
<Appenders>


    <Routing name="RoutingAppender">

        <Routes pattern="${ctx:logFileName}">
            <Route>
                <RollingFile name="Rolling-${ctx:logFileName}"
                             fileName="logs/${ctx:logFileName}"
                             filePattern="logs/${ctx:logFileName}.%i.log.gz">
                    <PatternLayout pattern="d{ABSOLUTE} %level{length=5} [%thread] %logger{10}.%method:%line-%msg%n"/>
                    <SizeBasedTriggeringPolicy  size="100 MB" />
                </RollingFile>
            </Route>

            <!-- This route is chosen if ThreadContext has no value for key logFileName} -->
            <Route key="$${ctx:logFileName}">
                <RollingFile name="Rolling-default" fileName="logs/WITHOOUT-THREAD-CONTEXT.log"
                             filePattern="./logs/${date:yyyy-MM}/default-%d{yyyy-MM-dd}-%i.log.gz">
                    <PatternLayout>
                        <pattern>%d{ABSOLUTE} %level{length=5} [%thread] %logger{10}.%method:%line-%msg%n</pattern>
                    </PatternLayout>
                    <Policies>
                        <TimeBasedTriggeringPolicy interval="6" modulate="true" />
                        <SizeBasedTriggeringPolicy size="100 MB" />
                    </Policies>
                </RollingFile>
            </Route>

        </Routes>
    </Routing>
</Appenders>

问题是,我在第二个路由中获得了外部库日志(那些没有附加程序的)和我的项目日志,尽管我只想要外部日志。

共有1个答案

冯野
2023-03-14

我建议使用如下配置-

<Configuration status="WARN">
    <Appenders>

        <RollingFile name="RollingFile"
                             fileName="logs/${ctx:logFileName}"
                             filePattern="logs/${ctx:logFileName}.%i.log.gz">
            <PatternLayout pattern="d{ABSOLUTE} %level{length=5} [%thread] %logger{10}.%method:%line-%msg%n"/>
            <SizeBasedTriggeringPolicy  size="100 MB" />
        </RollingFile>

        <RollingFile name="Rolling-default" fileName="logs/WITHOOUT-THREAD-CONTEXT.log"
                             filePattern="./logs/${date:yyyy-MM}/default-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout>
                <pattern>%d{ABSOLUTE} %level{length=5} [%thread] %logger{10}.%method:%line-%msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="6" modulate="true" />
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="application.package" level="info" additivity="false">
            <appender-ref ref="RollingFile" />
        </Logger>
        <Root level="info" additivity="false">
            <appender-ref ref="Rolling-default" />
        </Root>
    </Loggers>
</Configuration>

在此配置中,有2个记录器。一个记录器适用于具有根包名称-application.package的应用程序。这个包应该包含应用程序的所有子包和类。它将使用RollingFileAppender进行日志记录。

另一个是Rootlogger,它可以用于记录外部库,即不在application.package中的类。它将使用Rolling-默认Appender

在上面的配置中,您正在通过上下文查找设置fileName,因此您必须在开始时设置上下文值,否则您将获得错误。

 类似资料:
  • ,日志记录将进入一个文件; (路径)/service_name/service_name.log 我想用logback复制这种行为,但在logback.xml配置中获取“logger”名称时遇到了真正的困难。它可以在log encoder.pattern中看到,即“%d%-5level%logger{35}-%msg%n”。

  • 假设我用Quartz-Scheduler调度了2个作业 作业1 作业2 到目前为止,两个作业的日志输出都转储在同一个日志文件中。我想将这2个作业的输出记录到两个不同的文件中 日志文件-job1.txt 日志文件-job2.txt Quartz-Scheduler(主线程日志文件,单独) jogfile-job1.txt(单独的日志文件) jogfile-job2.txt(单独的日志文件) 谢谢你

  • 我曾试图使用log4j2在一个Spring Boot应用程序中进行日志记录,它工作正常,但问题是,并非所有日志记录都按照log4j2中的配置进入日志文件。xml很少有日志被引导到控制台,后面是我的pom片段,后面是log4j2。xml和控制台的输出,以及日志文件的输出 波姆。xml log4j2。xml 控制台输出 日志文件输出

  • 我有一个Keycloak EAR模块,部署在Keycloak 11.0上。在我的EAR模块中,我希望使用带有SLF4J的log4j2日志库。我通过直接在pom中添加以下依赖项成功地完成了这一点:、&。 通过将设置为来排除Wildfly日志记录依赖项。在打包的EAR外部指定,并用系统属性引用。 现在问题来了。我还希望Keycloak使用log4j2,但我无法使其工作。Keycloak使用的是Jbos

  • 问题内容: 我需要将对项目中的Oracle数据库的所有查询记录到日志文件中。 有什么 好的 解决方案来实现这一目标?一些示例用法将不胜感激。 我已经用jdbcdslog查看了SLF4J,但不确定如何使用它登录到文件。而且,我需要“过滤”一些日志(因为我不需要知道何时调用某种方法) 最好是,我更愿意使用,但这不是必需的。 谢谢。 更新 我找到了这篇Oracle文章,但是它并没有真正告诉您如何以编程方