📅  最后修改于: 2023-12-03 15:32:45.136000             🧑  作者: Mango
Log4j 是使用广泛的 Java 日志框架之一,它提供了丰富的日志级别、输出方式和灵活的配置方式。其中,日志输出格式是非常重要的一部分,它能够决定日志的可读性和便捷性。本文将介绍 Log4j 日志格式设置的相关知识。
日志格式指的是输出的日志信息的格式,它决定了输出的信息包含哪些内容、以什么样的形式呈现。Log4j 默认的日志格式为:
%d [%t] %-5p %c - %m%n
其中,符号的含义如下:
%d
:输出日志的时间[%t]
:输出线程名%-5p
:输出日志级别,-5
表示左对齐并且占5个字符的位置%c
:输出日志所在的类名-%m%n
:输出日志的信息及换行符根据需求,我们可以自定义日志格式,Log4j 支持多种自定义方式,常用的有如下几种。
通过在配置文件中设置 layout
参数可以定义自定义的日志格式,在参数值中使用以下转义字符可以当前日期、时间、级别、线程、类名和日志信息等。
%d
:输出日志的时间%t
:输出线程名%p
:输出日志级别%c
:输出日志所在的类名%m
:输出日志的信息%n
:输出换行符示例:
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<!-- 自定义日志格式 -->
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c:%L - %m%n" />
</layout>
</appender>
除了使用自定义日志格式字符串外,我们还可以自己实现布局对象来完成日志的输出。需要继承 org.apache.log4j.Layout
类。自定义布局对象的主要步骤如下:
org.apache.log4j.Layout
类。format(logEvent)
方法,将 LogEvent 转换为字符串。示例:
public class CustomLayout extends Layout {
@Override
public String format(LoggingEvent loggingEvent) {
StringBuilder sb = new StringBuilder();
sb.append(loggingEvent.getTimeStamp()).append(" ");
sb.append(loggingEvent.getThreadName()).append(" ");
sb.append(loggingEvent.getLevel().toString()).append(" ");
sb.append(loggingEvent.getLoggerName()).append(" - ");
sb.append(loggingEvent.getMessage().toString());
sb.append(Layout.LINE_SEP);
return sb.toString();
}
@Override
public boolean ignoresThrowable() {
return true;
}
@Override
public void activateOptions() {
// do nothing
}
}
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<!-- 自定义布局对象 -->
<layout class="com.example.CustomLayout" />
</appender>
Log4j 日志格式设置是非常灵活的,可以满足大多数需求。只需要按照自己的需求进行设置,即可完成自定义的日志输出格式。