我需要选择一个日志框架来替换log4j。我最初选择slf4j logback作为日志记录,并编写了以下配置,将应用程序日志和apache cxf的日志输出到单独的文件中,并在控制台上输出Spring/hibernate日志:
<?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实现异步日志记录,为此我编写了以下配置:
<?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文件中的“org.apache”,不会打印任何内容。日志-事实上,它是空的,它的日志会打印到服务器控制台。
有人能指出我做错了什么吗?谢谢
使用此配置的代码是否使用名称以“org.apache”开头的记录器?否则,您将看不到此记录器的任何输出。
要验证这一点,请使用上面的配置和以下代码:
Logger logger = LogManager.getLogger("org.apache.anything");
logger.debug("test");
Logback还支持异步。检查AsyncAppender
http://logback.qos.ch/manual/appenders.html
正如logback的文档所说,大多数appender本质上是同步的,但是如果我们将appender包装在异步appender中,那么线程将把数据推送到BlockingQueue中,如果有,比如说X-logback线程将从BlockingQueue获取数据并将其追加。这就是我对它的基本理解。 尝试使用JstackThread转储来测试这个。但是空手返回,没有回退线程的线索。 作为参考,请检查下面lo
本文向大家介绍Spring Boot异步输出Logback日志方法详解,包括了Spring Boot异步输出Logback日志方法详解的使用技巧和注意事项,需要的朋友参考一下 一、介绍 1.1 Logback Logback是由log4j创始人设计的另一个开源日志组件,它分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版
我的springboot项目中想要异步打印日志到文件,对 logback 做了如下配置 java的controller中使用下面代码打印日志 在日志文件中打印出线程名称,同时在IDEA控制台中也打印线程名称,照理说如果是异步写入的日志这两处的线程名称应该不一样,结果日志文件中输出的结果是 控制台中输出的是 线程ID和名称分别是:86 / http-nio-7076-exec-2 两处的线程名称一样
异步Log日志 use AsyncLog; yield AsyncLog::info('hello world'); yield AsyncLog::debug('test debug', ['foo' => 'bar']); yield AsyncLog::notice('hello world',[], 'group.com'); yield Async
我正在运行一个POC来查看将我们的j2ee应用程序迁移到Logback的影响。我花了一些时间在官方网站上,显然,除了新的JAR之外,唯一的变化就是logback.xml文件。不幸的是,这似乎还不够,部署工作了,日志文件也创建了,但没有记录任何内容(空)。 我的代码有以下语句 pom.xml现在具有以下内容 xml(使用官方网站上的web实用程序创建) 这让我想到了weblogic中的log4j。