admin

Log4j + Slf4j 按不同级别输出日志到不同文件
前言公司的项目是从外包公司买来的,所以项目的很多配置文件都是杂乱无章,比如 Spring 与 SpringMVC ...
扫描右侧二维码阅读全文
24
2018/08

Log4j + Slf4j 按不同级别输出日志到不同文件

前言

公司的项目是从外包公司买来的,所以项目的很多配置文件都是杂乱无章,比如 Spring 与 SpringMVC 配置重复扫描包的问题,日志的配置文件也是不起作用,结果就是每次一启动项目,控制台总是大量的刷一些无用的 DEBUG 级别的日志,所以找了个时间重新配置了一下。

配置

一开始从日志文件来看,并没有什么太大的问题,但无论我怎样修改日志级别,都不生效,于是查看 pom.xml 依赖项,发现有 Log4j 的依赖,还有 logback 的依赖,所以把 logback 的依赖去掉,重新启动项目,log4j 的配置终于生效。
下面来将项目修改为 Log4j + Slf4j 作为项目的日志管理。
Log4j + Slf4j 配置项目的日志需要引入的三个 jar 包:

slf4j-api.jar
log4j.jar
slf4j-log4j12.jar

然后就是log4j.properties配置文件了:

log4j.rootLogger = ${logLevel}

log4j.addivity.org.apache=true
###
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{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n

### 输出到日志文件 ###
log4j.logger.infolog = info,infolog 
log4j.appender.infolog.Append = true
log4j.appender.infolog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.infolog.File = ../logs/vehicle-web/vehicle-web_
log4j.appender.infolog.DatePattern=yyyy-MM-dd'.log'
log4j.appender.infolog.layout = org.apache.log4j.PatternLayout
log4j.appender.infolog.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n
log4j.additivity.infolog=false

### 保存异常信息到单独文件 ###
log4j.logger.errorlog = error,errorlog
log4j.appender.errorlog.Append = true
log4j.appender.errorlog.Threshold = error
log4j.appender.errorlog = org.apache.log4j.DailyRollingFileAppender
log4j.appender.errorlog.File = ../logs/vehicle-web/vehicle-web-error_
log4j.appender.errorlog.DatePattern=yyyy-MM-dd'.log'
log4j.appender.errorlog.layout = org.apache.log4j.PatternLayout
log4j.appender.errorlog.layout.ConversionPattern = [%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n
log4j.additivity.errorlog=false

###关闭不必要的一些DEBUG日志
log4j.logger.org.springframework.data.redis.core.RedisConnectionUtils = INFO
log4j.logger.org.apache.http.impl.conn.PoolingHttpClientConnectionManager = INFO

由于项目是外包做的,所以里面存在着很多的e.printStackTrace();打印错误信息的地方,这种打印错误的方法相当于System.out的打印级别,所以在上面的配置中是不会打印到错误日志文件的,所以将项目中所有抛出异常的地方改为logger.error(e.getMessage(), e);形式来打印错误信息,需要注意的是以前总是用logger.error(e.getMessage)来打印错误日志,这种做法是非常不好的,因为日志中看不到错误的堆栈信息,无法定位到具体的代码行。

上面的配置倒是挺简单的,但还是有需要注意的地方:如果项目没有配置全局异常捕获类,那么上面的配置在生产环境中就可能有些错误日志不会输出,这是由于SpringMVC默认的全局异常日志打印为DEBUG导致的,所以必须自己自定义全局异常捕获类,将错误信息以ERROR级别打印才会在系统的日志中查看得到。

Last modification:August 24th, 2018 at 05:47 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment