log4j 业务日志打印配置
日志通常分为两种:系统日志和业务数据日志
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。
其中,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
//## ------------------rootLogger ------------------ ##
//日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。
//Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
//E,D代表了appenderName
log4j.rootLogger = info, E, D
//## ------------------Console------------------------ ##
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{ABSOLUTE} %5p %c:%L - %m%n
//## ------------------File------------------ ##
//debug
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = /data/soft/kafka-tool/logs/debug.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
//error
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = /data/soft/kafka-tool/logs/error.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
//## --------------------自定义logger----------------------##
//用于为不同的业务建立独立的日志 .使用自定义日志尽量不设置根日志rootLogger
//logger名:demoOneLog logger输出器 demoOneAppender
log4j.logger.demoOneLog=DEBUG,demoOneAppender
log4j.additivity.demoOneLog=false
log4j.appender.demoOneAppender=org.apache.log4j.DailyRollingFileAppender
log4j.appender.demoOneAppender.File=/data/soft/kafka-tool/logs/demoOneLog/demoOneLog.log
log4j.appender.demoOneAppender.DatePattern='.'yyyy-MM-dd
//##定义独立的日志级别 类似于filter
log4j.appender.demoOneAppender.Threshold = DEBUG
log4j.appender.demoOneAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.demoOneAppender.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %m%n
//...可以配置多个自定义logger
//没有实际尝试,但应该也很有用
//把重要的业务日志异步批量写入数据库
log4j.logger.business=INFO,db
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
//#注意:bufferSize可以缓存日志,设置为>1后,缓存满后再插入数据库。但如果程序终结有可能缓存未输出。
//需要在程序结束前调用LogManager.shutdown()
log4j.appender.db.BufferSize=100
log4j.appender.db.URL=jdbc://
log4j.appender.db.driver=
log4j.appender.db.user=root
log4j.appender.db.password=
log4j.appender.db.sql=
INSERT INTO
log4j_log (PRIORITY,LOGDATE,CLASS,METHOD,MSG)
VALUES('%p','%d{yyyy-MM-dd HH:mm:ss}','%C','%M','%m')
log4j.appender.db.layout=org.apache.log4j.PatternLayout
在java项目中使用时,需要引入的pom
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
//或者用
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.12</version>
</dependency>
程序中使用:
//除了当前log的输出外,还有rootLogger的两个输出器也同时产生了输出(除非设置该日志的additivity=false)
Log dempOneCustomLog = LogFactory.getLog("demoOneLog");
dempOneCustomLog.info(message);
dempOneCustomLog.debug(message);
主要参考:日志框架(一)—– log4j使用
关于日志框架的源码参考:java日志,需要知道的几件事(commons-logging,log4j,slf4j,logback)