log4j构成
组件 | 作用 |
---|---|
Logger | 控制要启用或禁用哪些日志记录语句,并对日志信息进行级别限制 |
Appenders | 指定了日志将打印到控制台还是文件中 |
Layout | 控制日志信息的显示格式 |
配置
可以使用properties
的配置方式,也可以xml
的配置方式,这里讲的是前者。
所有日志都有根日志记录,这个root Logge
是所有日志的祖先,意味着你新建的都是子日志记录,这个根日志都能共享你的日志信息。
详细配置:
##根logger主要定义log4j支持的日志级别及输出目的地,其语法为:
## log4j.rootLogger = [ level ] , appenderName, appenderName...
### Info级别的日志,默认输出到总控制台
log4j.rootLogger = info,Console,DATABASE
##自定义的日志是否记录在父里面
#log4j.additivity.xxx=false
#mybatis记录日志,com.tgb.mapper为包,也可以再缩小范围到具体文件具体方法,TRACE级别会顺带输出结果,记录很多可以改为DEBUG只记录sql
log4j.logger.com.tgb.mapper=DEBUG,D
#Console控制台
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d %-5p [%c.%M.%F\:%L] - %m%n %X{REQUEST_UUID} %X{HOST_IP} %X{HOST_NAME} %X{APPKEY}
#output2file输出文件
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = ${catalina.base}/log/D/output2file.txt
#log4j.additivity.D=false
log4j.appender.D.Append = true
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [ %L\:%r ] - [ %p ] %m%n
#自定义日志Mylogger
log4j.logger.Mylogger=INFO,Mylogger
log4j.appender.Mylogger = org.apache.log4j.DailyRollingFileAppender
log4j.appender.Mylogger.File = ${catalina.base}/log/Mylogger/Mylogger.txt
log4j.additivity.Mylogger=false
log4j.appender.Mylogger.Append = true
log4j.appender.Mylogger.Threshold = INFO
log4j.appender.Mylogger.layout = org.apache.log4j.PatternLayout
log4j.appender.Mylogger.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [ %L\:%r ] - [ %p ] %m%n
#通过扫描包名类名
log4j.logger.com.tgb.controller.UserController=INFO,class
log4j.appender.class = org.apache.log4j.DailyRollingFileAppender
log4j.appender.class.File = ${catalina.base}/log/C/C.txt
log4j.additivity.class=false
log4j.appender.class.Append = true
log4j.appender.class.Threshold = INFO
log4j.appender.class.layout = org.apache.log4j.PatternLayout
log4j.appender.class.layout.ConversionPattern = %-d{yyyy-MM-dd HH\:mm\:ss} [(%F\:%L)] - [ %p ] %m%n
# 错误日志写入数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.DATABASE.URL=jdbc:mysql://127.0.0.1:3306/eb_error_log
log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver
log4j.appender.DATABASE.user=root
log4j.appender.DATABASE.password=root
# 本处设置为"ERROR"或以上级别在数据库存储
log4j.appender.DATABASE.Threshold=ERROR
# 存储数据
log4j.appender.DATABASE.sql=INSERT INTO error_log(Message) VALUES ('%d - [%t] %-5p %c:%L - %m%n')
log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout
log4j.appender.DATABASE.layout.ConversionPattern=%d - [%t] %-5p %c:%L - %m%n
#发送邮件,跟目录需要加上,否则不起作用Mail
#log4j的邮件发送appender,如果有必要你可以写自己的appender
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
#发送邮件的门槛,仅当等于或高于ERROR(比如FATAL)时,邮件才被发送
log4j.appender.MAIL.Threshold=ERROR
#缓存文件大小,日志达到10k时发送Email
log4j.appender.MAIL.BufferSize=10
#发送邮件的邮箱帐号
log4j.appender.MAIL.From=xxxxxxx@163.com
#SMTP邮件发送服务器地址
log4j.appender.MAIL.SMTPHost=smtp.163.com
#SMTP发送认证的帐号名
log4j.appender.MAIL.SMTPUsername=woshilinqin163@163.com
#SMTP发送认证帐号的密码
log4j.appender.MAIL.SMTPPassword=xxxxxx
#是否打印调试信息,如果选true,则会输出和SMTP之间的握手等详细信息
log4j.appender.MAIL.SMTPDebug=true
#邮件主题
log4j.appender.MAIL.Subject=Log4JErrorMessage
#发送到什么邮箱,如果要发送给多个邮箱,则用逗号分隔;
#如果需要发副本给某人,则加入下列行
#log4j.appender.MAIL.Bcc=xxx@xxx.xxx
log4j.appender.MAIL.To=625424841@qq.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=[framework]%d - %c -%-4r[%t]%-5p %c %x -%m%n
简单理解就是下面配置都是一组组的。程序中通过获取对应的appender对象或者类Clazz,然后日志就可以对应输出到配置的控制台或者文件输出。默认根路径是会一起记录的。log4j.additivity.xxx=false
则声明不给根日志记录。
程序代码中使用获取对应的appender方式:
前面的对应配置里面的包名配置方式,后者使用name属性进行日志记录。
Logger logger=Logger.getLogger(UserController.class);
Logger logger1=Logger.getLogger("Mylogger");
//获取根日志
Logger log=Logger.getRootLogger();