首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >登录到log4j2异步日志记录迁移

登录到log4j2异步日志记录迁移
EN

Stack Overflow用户
提问于 2015-06-03 22:41:13
回答 2查看 5.2K关注 0票数 1

我需要选择一个日志记录框架来取代log4j。我最初选择slf4j + logback进行日志记录,并编写了以下配置,将应用程序日志和apache cxf的日志输出到单独的文件中,并在控制台上输出spring/hibernate日志:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n
        </Pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>TRACE</level>
    </filter>
</appender>

<appender name="dailyRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>D:\\MYDIR\\logs\\app_logback.%d{yyyy-MM-dd}.log</FileNamePattern>
        <maxHistory>30</maxHistory>         
    </rollingPolicy>

    <encoder>
        <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
    </encoder>      
</appender>

<appender name="minuteRollingFileAppenderCxf" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>D:\\MYDIR\\logs\\app_logback_cxf.%d{yyyy-MM-dd_HH-mm}.log</FileNamePattern>
        <maxHistory>30</maxHistory>         
    </rollingPolicy>

    <encoder>
        <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern>
    </encoder>      
</appender>

<logger name="com.mycustomcode" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="dailyRollingFileAppender"/>
</logger>

<logger name="org.apache" additivity="false">
    <level value="INFO" />
    <appender-ref ref="minuteRollingFileAppenderCxf"/>
</logger>

<root>
    <level value="INFO" />
    <appender-ref ref="consoleAppender" />
</root>
</configuration>

但是,我开始了解log4j2中的异步日志记录,并希望在我的设置中使用log4j2实现异步日志记录,为此我编写了以下配置:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console">
  <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>

<RandomAccessFile name="RandomAccessFile" fileName="D:\\MYDIR\\logs\\app_log4j2.log" immediateFlush="false" append="false">
  <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
  </PatternLayout>
</RandomAccessFile>

<RandomAccessFile name="RandomAccessFile2" fileName="D:\\MYDIR\\logs\\app_log4j2_cxf.log" immediateFlush="false" append="false">
  <PatternLayout>
    <Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
  </PatternLayout>
</RandomAccessFile>
</Appenders>

<Loggers>
<AsyncLogger name="com.mycustomcode" level="debug" includeLocation="true" additivity="false">
  <AppenderRef ref="RandomAccessFile"/>
</AsyncLogger>

<AsyncLogger name="org.apache" level="debug" includeLocation="true" additivity="false">
  <AppenderRef ref="RandomAccessFile2"/>
</AsyncLogger>

<Root level="debug" includeLocation="false">
  <AppenderRef ref="Console"/>
</Root>
</Loggers>

</Configuration>

log4j2配置可以工作,但它只能在其文件(app_log4j2.log)中正确打印"com.mycustomcode“的日志。对于文件app_log4j2_cxf.log中的"org.apache“,不会打印任何内容--实际上,它是空白的,并且其日志会打印到服务器控制台。

有人能指出我做错了什么吗?谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-07-16 09:43:56

logback也有异步支持。检查AsyncAppender

http://logback.qos.ch/manual/appenders.html

票数 1
EN

Stack Overflow用户

发布于 2015-08-24 22:40:08

使用此配置的代码是否使用名称以"org.apache“开头的记录器?否则,您将看不到此记录器的任何输出。

要验证这一点,请使用上面的配置和以下代码:

代码语言:javascript
复制
Logger logger = LogManager.getLogger("org.apache.anything");
logger.debug("test");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30623304

复制
相关文章

相似问题

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