回溯XMLLayout

199 阅读2分钟

LogbackXMLLayout将事件输出为符合log4j.td的XML格式(而不是W3C XML Schema)。生成的XML日志可以使用Apache Chainsawvigilog等开源的日志查看工具来查看。

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-corelogback-classicslf4j-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-coreslf4j-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)进行日志处理。

学习愉快!!

源代码下载