日志是程序运行过程的信息,其数据能够帮助开发人员提前发现并避开异常,在错误发生后能够找到事件的起因,并纠正错误,达到预期的运行效果。在java开发中,日志系统是java项目中必不可少的组成部分。日志可以帮助我们快速的定位问题,记录程序运行过程中的情况,以便项目的监控和优化。我们在日常开发中主要使用的java日志框架组件有:log4j、SLF4J、logback、Commons Logging、log4j2等。
slf4j,即简单日志门面(Simple Logging Facade for JAVA),不是具体的日志解决方案,它只服务于各种各样的日志系统。一般来说,slf4j配合log4j、logback进行使用,可以理解为slf4j是标准,log4j和logback是实现。官方推荐使用logback作为日志系统,因为logback有更快执行速度,logback-classic 也实现了slf4j。
日志的管理分为两大部分:
-
日志记录器
-
日志处理器
日志记录器负责按设定级别对日志进行记录和向上传递, 日志处理器负责按设定级别对日志进行打印。
日志级别一般分为7个打印级别(不同的日志框架组件可能打印的日志级别区别不大):
OFF-关闭所有日志;
FATAL-记录严重的错误,并且会导致应用程序退出;
ERROR-记录严重的错误,但不会影响程序的运行;
WARN-记录警告;
INFO-记录程序中比较有意义的信息;
DEBUG-记录程序中的细节信息;
ALL-记录所有的日志;
以log4j为例,log4j建议使用的日志信息优先级由高至低分别是error、warn、info、debug。日志信息可以输出到控制台、文件或者图形组件。使用FileAppender可以将日志信息输到文件中,文件太大(日志内容过多)时导致读取不方便,可以使用DailyRollingFileAppender,将log信息输到按照日期分区的多个文件中,即每天产生一个log文件,每个log文件只记录当天的信息。
log4j可以同时设置多个日志输出源,在log4j.properties配置文件中可指定同时在控制台和文件中输出日志信息。也可以将日志信息存放到数据库中。
log4j.rootLogger=warn,myconsole,errinfo
#输出到控制台的日志
log4j.appender.myconsole=org.apache.log4j.ConsoleAppender
log4j.appender.myconsole.layout=org.apache.log4j.PatternLayout
#log4j.appender.myconsole.Threshold=warn
log4j.appender.myconsole.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] (%F:%L) - %m%n
#输出到文件的异常日志文件
log4j.appender.errinfo=org.apache.log4j.FileAppender
log4j.appender.errinfo.File=D:/ERROR.LOG
log4j.appender.errinfo.Threshold =ERROR
log4j.appender.errinfo.layout=org.apache.log4j.PatternLayout
log4j.appender.errinfo.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p [%t] (%F:%L) - %m%n