记录一次配置log4j2中PatternLayout的pattern模版含义

博客介绍了配置log4j2时输出日志格式的相关内容。在appenders中配置控制台输出格式并增加过滤内容,还提到自定义变量${LOG_PATTERN}及其在项目中的配置,说明了其value含义,最后给出打印结果参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前提:当在配置log4j2时,需要配置输出日志的格式。

在appenders中配置控制台输出格式,增加了过滤内容

 <console name="Console" target="SYSTEM_OUT">
     <!--输出日志的格式 -->
     <PatternLayout pattern="${LOG_PATTERN}" />
     <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
     <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
  </console>

${LOG_PATTERN}为自定义的变量,在项目中的配置如下

<!-- 变量配置 -->
<Properties>
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" />
    <!-- 以下配置不在本次记录内容中,故而不展示 -->
</Properties>

这里的value【%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n】含义具体如下

%d: 表示日期;
%t: 表示线程名;
%X{X-B3-TraceId}: 表示traceId,是 Zipkin 分布式跟踪系统中的一个头部信息,用于标识一次请求的跟踪ID;
%X{X-B3-SpanId}: 表示spanId;
%-5level: 级别从左显示5个字符宽度;
%logger{50}: 表示 Logger 名字最长50个字符;
%L: 表示输出日志事件发生的具体位置,包括类名、方法名、行号等信息;
%msg: 日志消息;
%n: 是换行符;

最后打印结果参考如下:

2023-12-07 15:51:33.079 [xxl-job, JobThread-8-1701935400042] INFO  [com.xxl.job.core.thread.JobThread:250] [2becb0393d33f4d0,2becb0393d33f4d0] - >>>>>>>>>>> xxl-job JobThread stoped, hashCode:Thread[xxl-job, JobThread-8-1701935400042,10,main]

<think>嗯,用户想了解如何在Spring Boot中创建配置类来配置Log4j2的模板和日志。首先,我需要回忆一下Spring Boot的日志配置流程。Spring Boot默认使用Logback,所以切换到Log4j2需要排除Logback的依赖,然后添加Log4j2的依赖。这一点很重要,如果依赖处理不当,可能会导致冲突或者配置不生效。 接下来,用户提到要创建一个配置类。不过,通常配置Log4j2是通过XML或者properties文件,比如log4j2.xml或者log4j2-spring.xml,而不是通过Java配置类。可能用户是希望用Java代码来配置,但Log4j2本身更推荐使用配置文件。这里可能需要澄清,或者解释两种方式的不同。不过根据常规做法,还是先按照配置文件的方式来指导。 不过,用户特别提到了“配置类”,可能需要结合Spring的@Configuration来动态设置日志配置。这时候需要考虑如何在Spring Boot中自定义Log4j2配置。或者用户可能有误解,以为必须通过Java类来配置。这时候需要指出通常的做法,同时如果有必要的话,再介绍如何通过编程方式配置。 然后,步骤方面,首先需要添加依赖。正确的依赖是spring-boot-starter-log4j2,同时排除spring-boot-starter-logging。这个部分需要检查Maven或Gradle的配置,给出示例代码。 接着,创建配置文件,比如src/main/resources/log4j2-spring.xml。需要提供一个模板示例,包含Console和File的Appender,以及Root和Logger的配置。比如设置日志级别、输出格式、滚动策略等。同时要确保配置文件的语法正确,避免常见的错误,比如错误的标签或者属性。 然后,可能需要提到如何在应用中使用日志,比如注入Logger实例,使用@Slf4j注解等。这部分对用户来说可能也是需要的,确保他们知道如何记录日志。 另外,可能需要处理一些常见问题,比如配置文件的位置是否正确,日志文件无法生成的原因,比如权限问题,或者配置中的路径是否正确。以及如何根据不同的profile进行配置,比如使用Spring Profile特定的配置。 如果用户确实需要动态配置,可能需要使用Log4j2的ConfigurationFactory或者通过Spring的Environment来动态调整配置,但这种情况相对复杂,可能不在基础问题范围内。 最后,总结步骤,确保用户能够一步步跟着操作,同时验证配置是否生效。比如启动应用,检查控制台输出和日志文件是否生成,调整日志级别观察输出变化等。 可能还需要提醒用户注意依赖冲突,检查是否成功排除了Logback,否则可能会导致启动失败或者日志框架冲突。此外,Log4j2配置语法和Logback不同,需要正确使用其XML结构,比如Configuration、Appenders、Loggers等标签。 总的来说,回答的结构应该是先说明依赖调整,然后创建配置文件,提供示例模板,接着说明如何使用日志记录,最后验证配置。同时指出常见问题和注意事项,确保用户能够顺利配置。</think>以下是在Spring Boot中配置Log4j2的详细步骤: --- ### 一、前置依赖配置 1. **排除默认日志框架** 在`pom.xml`中移除Spring Boot默认的`spring-boot-starter-logging`: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> ``` 2. **添加Log4j2依赖** 引入`spring-boot-starter-log4j2`: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` --- ### 二、创建Log4j2配置文件 1. **配置文件位置** 在`src/main/resources`目录下创建`log4j2-spring.xml` 2. **配置模板示例** ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <!-- 控制台输出 --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- 文件滚动日志 --> <RollingFile name="File" fileName="logs/app.log" filePattern="logs/app-%d{yyyy-MM-dd}-%i.log"> <PatternLayout> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern> </PatternLayout> <Policies> <!-- 每天滚动 --> <TimeBasedTriggeringPolicy interval="1"/> <!-- 文件大小超过10MB滚动 --> <SizeBasedTriggeringPolicy size="10 MB"/> </Policies> <!-- 最多保留7天日志 --> <DefaultRolloverStrategy max="7"/> </RollingFile> </Appenders> <Loggers> <!-- 自定义包日志级别 --> <Logger name="com.example" level="DEBUG" additivity="false"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Logger> <!-- 根日志配置 --> <Root level="INFO"> <AppenderRef ref="Console"/> <AppenderRef ref="File"/> </Root> </Loggers> </Configuration> ``` --- ### 三、Spring Boot配置类(可选) 如果需要动态修改配置,可创建配置类: ```java @Configuration public class LogConfig { @Bean public LoggerContext loggerContext() { return (LoggerContext) LogManager.getContext(false); } @Bean public ConfigurationFactory customConfig() { // 可通过代码动态修改配置 return new CustomConfigurationFactory(); } } ``` --- ### 四、代码中使用日志 1. **添加Lombok注解** 在类上使用`@Slf4j`注解: ```java @Slf4j @RestController public class DemoController { @GetMapping("/test") public String test() { log.debug("Debug级别日志"); log.info("Info级别日志"); return "Hello Log4j2"; } } ``` 2. **传统方式** 手动创建Logger实例: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class DemoService { private static final Logger logger = LogManager.getLogger(DemoService.class); } ``` --- ### 五、验证配置 1. **启动应用** 观察控制台输出格式是否符合配置 2. **检查日志文件** 查看`logs/app.log`是否生成 3. **动态调试** 修改日志级别为`DEBUG`,观察是否输出更详细日志 --- ### 常见问题排查 1. **配置未生效** 检查文件名是否为`log4j2-spring.xml`且位于resources目录 2. **依赖冲突** 使用`mvn dependency:tree`检查是否残留Logback依赖 3. **权限问题** Linux系统需确保logs目录有写入权限 --- 通过以上步骤即可完成Log4j2的集成。建议优先使用XML配置文件,动态配置类适用于需要运行时修改日志配置的特殊场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值