# ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF LOG_LEVEL=INFO log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE,ERR # 打印日志到控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Encoding=utf-8 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n # 打印日志到文件 log4j.logger.FILE=INFO,FILE log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=${catalina.base}/logs/admin.log log4j.appender.FILE.Encoding=utf-8 log4j.appender.R.MaxFileSize=100MB log4j.appender.R.MaxBackupIndex=100 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout #log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n
LOG_LEVEL为日志的输出级别,共有7级:OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALLhtml
Log4j只建议使用4个级别,优先级从高到低分别是error,warn,info和debug。若是在使用了info级别的日志,只会输出info级别下info、debug等的日志,warn、error等日志不会被打印。java
如:输出到控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
sql
通常使用PatternLayout,本身配置输出格式。apache
Log4J采用相似C语言中的printf函数的打印格式格式化日志信息app
如:函数
log4j.appender.logRecord.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n 2018-06-25 16:26:40 com.xk.edu.interception.LogRecordInterception@(LogRecordInterception.java:22):pre handle --->>> --->>>--- log4j.appender.logRecord.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} (%L)\:%m%n 2018-06-25 16:30:39 (22):pre handle --->>> --->>>--- log4j.appender.logRecord.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss},%m%n 2018-06-25 16:35:16,pre handle --->>> --->>>---
把异常单独打印到一个单独的文件中,方便查看定位排查问题。
配置以下:布局
# 保存异常信息到单独文件 log4j.appender.ERR = org.apache.log4j.DailyRollingFileAppender # 天天产生一个日志文件 log4j.appender.ERR.DatePattern='.'yyyy-MM-dd # 异常日志文件名 log4j.appender.ERR.File=${catalina.base}/logs/error/adminError.log log4j.appender.ERR.Append = true # 是否当即输出 log4j.appender.ERR.ImmediateFlush=true log4j.appender.ERR.Encoding=utf-8 # 只输出ERROR级别以上的日志!!! log4j.appender.ERR.Threshold = ERROR log4j.appender.ERR.layout = org.apache.log4j.PatternLayout log4j.appender.ERR.layout.ConversionPattern = [%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n
上面配置中产生的error以上级别的日志会打印到logs/adminError.log中,明天会把今天产生的异常日志保存一个文件中,名称是adminError.log + 今天的日期,日期格式是根据log4j.appender.ERR.DatePattern定义的格式。.net
如在6中把error级别以上的日志打印到异常文件中去了,若是不配置过滤,会在admin.log中打印info以上级别的日志,那样就重复打印了error以上级别的日志。线程
新FILE文件配置以下debug
# 打印日志到文件,排除error的日志 log4j.logger.FILE=INFO,FILE log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=${catalina.base}/logs/admin.log log4j.appender.FILE.Encoding=utf-8 log4j.appender.R.MaxFileSize=100MB log4j.appender.R.MaxBackupIndex=100 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout #log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n # 不打印warn以上级别的日志 log4j.appender.FILE.filter.infoFilter = org.apache.log4j.varia.LevelRangeFilter log4j.appender.FILE.filter.infoFilter.LevelMin=DEBUG log4j.appender.FILE.filter.infoFilter.LevelMax=WARN
这样就只在admin.log中打印DEBUG级别到WARN级别的日志了。
如:
log4j.logger.com.xk.edu.interception.LogRecordInterception=INFO,logRecord
这样自定义了一个logger,不使用log4j.rootLogger。自定义的logger之间的日志是隔离的,如上配置的,只打印LogRecordInterception类下的日志。
如:
log4j.logger.com.xk.edu.dao=DEBUG
com.edu.dao包下的内容按DEBUG级别输出,由于dao包下是mapper文件,加上这一个配置就能够打印sql语句了。
如下贴出配置文件:
# ALL,DEBUG,INFO,WARN,ERROR,FATAL,OFF LOG_LEVEL=INFO log4j.rootLogger=${LOG_LEVEL},CONSOLE,FILE,ERR # 打印日志到控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Encoding=utf-8 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout #log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{8}@(%F:%L):%m%n log4j.appender.CONSOLE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH:mm:ss} %C{1}@(%F:%L):%m%n # 打印日志到文件,排除error的日志 log4j.logger.FILE=INFO,FILE log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=${catalina.base}/logs/admin.log log4j.appender.FILE.Encoding=utf-8 log4j.appender.R.MaxFileSize=100MB log4j.appender.R.MaxBackupIndex=100 log4j.appender.FILE.DatePattern='.'yyyy-MM-dd log4j.appender.FILE.layout=org.apache.log4j.PatternLayout #log4j.appender.FILE.layout=org.apache.log4j.HTMLLayout log4j.appender.FILE.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n # 不打印warn以上级别的日志 log4j.appender.FILE.filter.infoFilter = org.apache.log4j.varia.LevelRangeFilter log4j.appender.FILE.filter.infoFilter.LevelMin=DEBUG log4j.appender.FILE.filter.infoFilter.LevelMax=WARN # 保存异常信息到单独文件 log4j.appender.ERR = org.apache.log4j.DailyRollingFileAppender # 天天产生一个日志文件 log4j.appender.ERR.DatePattern='.'yyyy-MM-dd # 异常日志文件名 log4j.appender.ERR.File=${catalina.base}/logs/error/adminError.log log4j.appender.ERR.Append = true # 是否当即输出 log4j.appender.ERR.ImmediateFlush=true log4j.appender.ERR.Encoding=utf-8 # 只输出ERROR级别以上的日志!!! log4j.appender.ERR.Threshold = ERROR log4j.appender.ERR.layout = org.apache.log4j.PatternLayout log4j.appender.ERR.layout.ConversionPattern = [%-5p][%d{yyyyMMdd HH:mm:ss,SSS}][%C{1}:%L] %m%n # 输出拦截器的日志, 只输出LogRecordInterception类下的日志 log4j.logger.com.xk.edu.interception.LogRecordInterception=INFO,logRecord log4j.appender.logRecord=org.apache.log4j.DailyRollingFileAppender log4j.appender.logRecord.Append=true # 是否当即输出 log4j.appender.logRecord.ImmediateFlush=true # 一分钟产生一个日志文件 #log4j.appender.logRecord.DatePattern='.'yyyy-MM-dd-HH-mm log4j.appender.logRecord.DatePattern='.'yyyy-MM-dd log4j.appender.logRecord.Encoding=utf-8 log4j.appender.logRecord.layout=org.apache.log4j.PatternLayout log4j.appender.logRecord.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} %C{8}@(%F\:%L)\:%m%n # 打印 dao 下的 sql log4j.logger.com.xk.edu.dao=DEBUG
http://www.blogjava.net/zJun/archive/2006/06/28/55511.html
https://blog.csdn.net/zxh317162782/article/details/51233704
https://blog.csdn.net/lingfenglangshao/article/details/78334147