Logback HTMLLayout

1,524 阅读2分钟

Logback HTMLLayout在一个HTML表格中输出事件。表列的内容是使用编码器属性中的转换模式指定的。

1.HTMLLayout配置样本

为了快速参考,这就是我们要参考的配置文件。它登录到c:/temp/logs/applicationLogs.html 文件并每天滚动。

<configuration>
	<property name="LOG_ROOT" value="c:/temp/logs" />
	<property name="HTML_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="HTML" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_ROOT}/${HTML_LOG_FILE}.html</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
			<!-- daily rollover -->
			<fileNamePattern>${LOG_ROOT}/${HTML_LOG_FILE}-%d{yyyy-MM-dd}.%i.html.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.html.HTMLLayout">
				<pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
			</layout>         
		</encoder>
	</appender> 
	
	<logger name="com.howtodoinjava.app" level="DEBUG" additivity="false">
        <appender-ref ref="HTML"/>
  </logger>

	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="HTML" />
	</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-core和slf4j-api,所以添加logback-classic的依赖就可以了。

3.HTMLLayout

3.1.默认的转换模式

默认情况下,HTMLLayout使用以下转换模式。

%date%thread%level%logger%mdc%msg

它创建了一个包含以下数据的表格。

  • Date- 日志事件的日期时间。
  • Thread- 线程名称。
  • Level- 日志级别。
  • Logger- 记录器名称。
  • MDC- MDC(映射诊断上下文)信息,如果有的话。
  • Message- 日志信息。

我们可以使用encoder 属性中的自定义模式来定制列和信息。

似乎Logback不支持Log4j2 HTMLLayout支持的大量表格格式。

3.2.自定义模式演示

我们正在使用自定义模式进行演示。我们已经删除了MDC信息,而是在类中打印行号。

%d{HH:mm:ss.SSS}%thread%level%logger%line%msg

让我们快速写几个日志语句,看看输出结果。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.howtodoinjava.demo.lombok.Article;

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);
	}
}

在浏览器中打开日志输出文件。

4.总结

在这个 logback HTML Layout 教程中,我们学会了在 HTML 文件中创建具有滚动功能的日志。这些HTML格式的日志可以帮助生成漂亮的报告,用于用SMTPAppender在电子邮件中发送日志。

但是如果日志产生的数量非常多,那么我们应该记录纯字符串的日志,使用专门的工具(如Splunk)进行日志处理。

学习愉快!!

下载源代码