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-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.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)进行日志处理。
学习愉快!!