1)选择正确的Log开源框架
Log4J中我们会这样写:
log.debug("Found " + records + " records matching filter: '" + filter + "'");
而在SLF4J中我们会这样写:
log.debug("Found {} records matching filter: '{}'", records, filter);
从可读性和系统效率来说, SLF4J( http://logback.qos.ch/ )比Log4J都要优秀(Log4J涉及到字符串连接和toString()方法的调用). 这里的{}带来的另一个好处, 我们在尽量不损失性能的情况, 不必为了不同的日志输出级别, 而加上类似isDebugEnabled()判断.
如果把log4j看做System.out.println()的话, 那么Perf4J就是System.currentTimeMillis()
关于日志jar包依赖的pom.xml参考模板
在这里插入代码片
日志框架有两个最大的优点就是可以指定输出类别(category)和级别(level).
-
ERROR:系统发生了严重的错误。
-
WARN:系统能继续运行, 但是必须引起关注. 对于存在的问题一般可以分为两类:
-
一种系统存在明显的问题(比如, 数据不可用),
-
另一种就是系统存在潜在的问题, INFO:重要的业务逻辑处理完成.
-
TRACE:系统详细信息, 主要给开发人员用,
-
DEBUG:主要给开发人员看,
一个理想的日志模式将包含下列信息:当前时间(不需要包含日志, 精确到毫秒)
日志级别(如果你关心这个)
线程名称
简单的日志名(非全限定名的那种)
日志描述信息
log配置文件主要包含三个节点:Logger、Appender、Layout。
Logger:配置打印日志的级别,输出日志的程序范围,以及关联的Appender。
Appender:配置日志的输出形式,输出策略等。
Layout:配置每条日志的内容格式。
#配置根节点
log4j.rootLogger=INFO,Log4jConsole,Log4jFile
#log不向上层传递
log4j.additivity.org.appache=false
#设置变量,保存路径 ${catalina.home}/logs
logDir=D:/tomcat/logs
#控制台输出
log4j.appender.Log4jConsole=org.apache.log4j.ConsoleAppender
log4j.appender.Log4jConsole.Threshold=INFO
log4j.appender.Log4jConsole.ImmediateFlush=true
log4j.appender.Log4jConsole.Target=System.out
#输出格式
log4j.appender.Log4jConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.Log4jConsole.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss,SSS}] [%c:%M:%L] %m%n
#文件输出
log4j.appender.Log4jFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Log4jFile.Threshold=INFO
log4j.appender.Log4jFile.ImmediateFlush=true
log4j.appender.Log4jFile.Append=true
log4j.appender.Log4jFile.File=${logDir}/log4j.log
log4j.appender.Log4jFile.DatePattern='.'yyyy-MM-dd
#输出格式
log4j.appender.Log4jFile.layout=org.apache.log4j.PatternLayout
log4j.appender.Log4jFile.layout.ConversionPattern=[%p][%d{yyyy-MM-dd HH:mm:ss,SSS}] [%c:%M:%L] %m%n