spring-boot中使用slf4j+log4j
背景
spring-boot默认是使用slf4j+logback做日志输出的, 本文主要演示如何切换为slf4j+log4j。
正常情况下,建议直接使用logback。
在某SpringBoot项目中,因为要使用ELK做日志采集,局方要求使用log4j并给出了一组日志格式规范:
- 日志分为xxx-info和xxx-error两个文件,分开打印
- 日志格式要求为
1
| %d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n
|
所以只能有两种方案可供选择:
- 配置logback,并保证与之前的log4j的行为一致
- 将logback切换为log4j
由于面对日志格式中的一大堆%比较头大,于是选择了不怎么优雅的方案2,切换为log4j。
配置Maven依赖
首先要显式的引入spring-boot-starter,并将其中的spring-boot-starter-logging排除掉
然后新增一个spring-boot-starter-log4j的依赖
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j</artifactId> <version>1.2.5.RELEASE</version> </dependency>
|
配置log4j
新建src/resource/log4j.properties,按正常方式配置即可
下面是一个双日志输出的样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| log4j.rootCategory=info,file_info,file_error,stdout log4j.logger.org.springframework.web.filter.CommonsRequestLoggingFilter=debug,file_info,stdout log4j.additivity.org.springframework.web.filter.CommonsRequestLoggingFilter=false
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.file_info=org.apache.log4j.RollingFileAppender log4j.appender.file_info.layout=org.apache.log4j.PatternLayout log4j.appender.file_info.MaxFileSize=100MB log4j.appender.file_info.MaxBackupIndex=10 log4j.appender.file_info.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n log4j.appender.file_info.Threshold=DEBUG log4j.appender.file_info.append=true log4j.appender.file_info.File=/opt/logs/busi/crm_sdtools-info.log
log4j.appender.file_error=org.apache.log4j.RollingFileAppender log4j.appender.file_error.layout=org.apache.log4j.PatternLayout log4j.appender.file_error.MaxFileSize=100MB log4j.appender.file_error.MaxBackupIndex=10 log4j.appender.file_error.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p](%-30c{1}) [TxId : %X{PtxId} , SpanId : %X{PspanId}] [ET:%X{ENV_TYPE},AN:%X{APP_NAME},SN:%X{SERVICE_NAME},CN:%X{CONTAINER_NAME},CI:%X{CONTAINER_IP}] %m%n log4j.appender.file_error.Threshold=ERROR log4j.appender.file_error.append=true log4j.appender.file_error.File=/opt/logs/busi/crm_sdtools-error.log
|