LogbackXMLLayout将事件输出为符合log4j.td的XML格式(而不是W3C XML Schema)。生成的XML日志可以使用Apache Chainsaw和vigilog等开源的日志查看工具来查看。
1.XMLLayout样本配置
给定的配置使用XML布局记录到滚动文件中。它记录到c:/temp/logs/applicationLogs.xml 文件,并每天滚动。
XMLLayout接受两个可选参数。
locationInfo:当设置为*"true "*时,日志位置信息被输出到日志条目中。默认情况下,它被设置为 false。properties:当设置为*"true*"时,MDC信息将被输出到多个日志条目中。默认情况下,它被设置为 false。
<configuration>
<property name="LOG_ROOT" value="c:/temp/logs" />
<property name="XML_LOG_FILE" value="applicationLogs" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="XML" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_ROOT}/${XML_LOG_FILE}.xml</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>${LOG_ROOT}/${XML_LOG_FILE}-%d{yyyy-MM-dd}.%i.xml.gz</fileNamePattern>
<!-- each archived file's size will be max 10MB -->
<maxFileSize>10MB</maxFileSize>
<!-- 30 days to keep -->
<maxHistory>30</maxHistory>
<!-- total size of all archive files, if total size > 100GB, it will delete old archived file -->
<totalSizeCap>100GB</totalSizeCap>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<charset>UTF-8</charset>
<layout class="ch.qos.logback.classic.log4j.XMLLayout">
<locationInfo>true</locationInfo>
<properties>true</properties>
</layout>
</encoder>
</appender>
<logger name="com.howtodoinjava.app" level="DEBUG" additivity="false">
<appender-ref ref="XML"/>
</logger>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="XML" />
</root>
</configuration>
2.2.依赖性
Logback在应用程序运行时需要三个模块,即logback-core、logback-classic和slf4j-api。
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.32</version>
</dependency>
请注意,logback-classic将过渡性地拉入logback-core和slf4j-api,所以添加logback-classic的依赖就足够了。
3.演示
让我们快速写几个日志语句,看看输出结果。
public class Main {
public static void main(final String[] args) {
Logger logger = LoggerFactory.getLogger(Main.class);
logger.debug("Debug Message Logged !!!");
logger.info("Info Message Logged !!!");
logger.error("Error Message Logged !!!", new NullPointerException("Something is NULL"));
Article a = Article.builder(1L).title("Test Article").tag("Data").build();
logger.info("Article fecthed for id : {} is : {}", 1, a);
}
}
打开日志输出文件,验证一下日志的内容。
<log4j:event logger="com.howtodoinjava.demo.slf4j.Main"
timestamp="1641553034276" level="INFO" thread="main">
<log4j:message>Info Message Logged !!!</log4j:message>
<log4j:locationInfo class="com.howtodoinjava.demo.slf4j.Main"
method="main" file="Main.java" line="16"/>
<log4j:properties>
<log4j:data name='MDC_KEY' value='VALUE' />
</log4j:properties>
</log4j:event>
<log4j:event logger="com.howtodoinjava.demo.slf4j.Main"
timestamp="1641553034282" level="ERROR" thread="main">
<log4j:message>Error Message Logged !!!</log4j:message>
<log4j:throwable><![CDATA[ at com.howtodoinjava.demo.slf4j.Main.main(Main.java:17)
]]></log4j:throwable>
<log4j:locationInfo class="com.howtodoinjava.demo.slf4j.Main"
method="main" file="Main.java" line="17"/>
<log4j:properties>
<log4j:data name='MDC_KEY' value='VALUE' />
</log4j:properties>
</log4j:event>
<log4j:event logger="com.howtodoinjava.demo.slf4j.Main"
timestamp="1641553034288" level="INFO" thread="main">
<log4j:message>Article fecthed for id : 1 is : Article(id=1, title=Test Article, tags=[Data])</log4j:message>
<log4j:locationInfo class="com.howtodoinjava.demo.slf4j.Main"
method="main" file="Main.java" line="20"/>
<log4j:properties>
<log4j:data name='MDC_KEY' value='VALUE' />
</log4j:properties>
</log4j:event>
4.总结
在这个logback XML布局的教程中,我们学会了在XML文件中创建具有滚动功能的日志。这些XML格式的日志可以使用免费的日志查看工具查看。
请注意,如果日志的生成量非常大,那么我们应该记录纯字符串的日志,并使用专门的工具(如Splunk)进行日志处理。
学习愉快!!