logging - Log4j2 将日志写入已滚动的文件

标签 logging log4j2

操作系统:Linux 网络逻辑:10.3.6.0 JDK:1.7.0_55

最近我们已从 log4j 1.x 迁移到 2.6.1 我看到记录器正在与主日志文件一起写入滚动文件。 考虑到给定的限制大小(50MB),滚动文件大小也较小。 这主要是在我推送 400k 条记录的负载时观察到的。 PFA log4j xml。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG" >
      <Properties>
        <Property name="theHostName">${hostName}</Property>
      </Properties>
      <!-- bufferedIO=true by default, bufferSize=8192bytes 
      -->
      <Appenders>
            <RollingFile name="FILE" filename="${sys:weblogic.Name}.log" filepattern="${sys:weblogic.Name}.log.%i" append="false" >
                <PatternLayout pattern="[%-5p][%d{yyyy-MM-dd HH:mm:ss,SSS}][${sys:weblogic.Name}:${hostName}][%t][%X{MessageInfo}][%c{1}:%M:%L][%msg]%n" />
                <Policies>
                    <SizeBasedTriggeringPolicy size="50 MB" />
                </Policies>
                <DefaultRolloverStrategy min="1" max="100" fileIndex="min"/>
            </RollingFile>
      </Appenders>
      <Loggers>
            <Logger level="DEBUG" includeLocation="true">
              <AppenderRef ref="FILE"/>
            </Logger>
            <Root level="INFO" includeLocation="true">
              <AppenderRef ref="FILE"/>
            </Root>
                <!--  Package specific log level defines -->
            <logger name="org.springframework">
                 <level value="WARN" />
            </logger>
            <logger name="org.jboss">
                 <level value="WARN" />
            </logger>
            <logger name="org.hibernate">
                 <level value="OFF" />
            </logger>
            <logger name="com.company.project.eligibility">
                 <level value="WARN" />
            </logger>
      </Loggers>
</Configuration>

请提出建议。

最佳答案

如果您有多个应用程序写入同一个文件,则需要特别注意 Log4j2(这与 Log4j 1.x 不同)。

为了从多个应用程序成功登录到同一文件,这些应用程序需要共享相同的 LoggerContext。您可以通过将 log4j2 jar 文件放入 weblogic 共享库中来实现此目的,以便 Log4j2 类由同一类加载器加载。

如果 log4j2 jar 捆绑在 WAR 或 EAR 存档中,则 log4j2 类将由单独的应用程序类加载器加载,并且它们最终会得到一个单独的 LoggerContext。如果多个应用程序有一个单独的 LoggerContext,它们彼此不知道,这可能会在文件翻转时产生奇怪的结果。

相关文档:Logging SeparationWeb Applications and JSPs 。 (您的应用程序可能不是 Web 应用程序,但如果它在 Weblogic 中运行,则适用相同的原则。)

关于logging - Log4j2 将日志写入已滚动的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37941991/

相关文章:

java - slf4j + java.util.logging : how to configure?

java - java.util.logging.Filehandler 更改输出文件时调用方法

python - 如何在 python 日志记录中过滤标准输出

java - Pax-logging-log4j2 在两个包中具有自定义附加程序

java - 我们如何让主线程等待异步日志记录完成(或其他方式)

java - 如何使用 java.util.logging.* 更改存储日志的目录

.net - 何时使用 'nested diagnostic context' (NDC)?

java - log4j2 访问环境属性

java - 用于标记和日志级别的 log4j2 过滤器

java - Log4j2 - 查找插件 (StrLookup) 解析 ThreadName 以通过 Thread 路由 RollingLogFile