目前在java编程中,日志已经发展出一套成熟的机制。常用的日志控件有Commons-logging、log4j以及JDK自带的Logging。从最初的System.out.println()到现在的Log4j,java日志功能日益强大
1.Jdk的logging
象征意义大于实际意义,不推荐使用,不赘述
2.Log4j控件
该控件是目前会用最广泛的控件,最初是一个开源的java项目,后面壮大了起来,现已归属Apache组织,现已衍生出Log4c(C++版本)、Log4N(.Net版本)等,它将日志分为ALL、TRACE(跟踪)、DEBUG(调试)、INFO(信息)、WARNING(警告)、ERROR(错误)、FITAL(致命)、OFF等几个级别,级别一次升高。级别高的Level会屏蔽级别低的信息。
Log4j.properties配置文件
导入log4j的jar包,例如:log4j-1.2.14.jar。日志配置输出级别、输出到哪、输出信息、输出格式等,都在该文件中进行配置,log4j.properties文件放到项目的src目录下即可。
日志记录器Logger
Logger 就是java代码中的Logger,例如:
public class TestLog{
public static Logger log = Logger.getLogger(TestLog.class); //此处为Logger
}
Logger的名字是Logger.getLogger()方法的参数,一般情况下,Log4j会取其所在的类名为Logger的名称,例如上述代码。
Logger为单态模式:相同名字的Logger只会有一个实例。如再构建一个同名的Logger,Log4j会返回先前的Logger实例
命名规则:一般以类名作为Logger的名称。命名规则类似于java中的package
log4j有一个根记录器rootLogger,他是所有Logger的父类
Logger的配置
一般情况下,只需要配置根记录器rootLogger即可,所有的Logger都会沿用rootLogger的配置
在log4j.properties文件中,log4j.logger后面配置的是Logger,log4j.appender后面配置的是Appender
rootLogger配置
#配置rootLogger为ERROR级别,输出地为A1
log4j.rootLogger=ERROR, A1
#配置 名称为 TestLog的Logger为DEBUG级别覆盖了父类rootLogger的ERROR级别,输出地配置同理,输出地继承rootLogger配置,紫色部分为包名,Testlog为类名
log4j.logger.com.xuezi.testlog.TestLog=DEBUG
#配置Appender A1,输出到控制台,使用正则表达式布局
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS}[%C]-[%p] %m%n
类别category配置
通过设置类别来设置类别下面所有的Logger,category类似于java中的package
log4j.rootLogger=ERROR, A1
#作用于类别com.xuezi下所有的Logger
log4j.category.com.xuezi=DEBUG
输出地 Appender
Appender表示日志输出到什么地方,常用的输出地有控制台、文件、数据库、远程服务器等。所有的Appender都实现自org.apache.log4j.Appender接口
输出到控制台
控制台是最常用的输出,控制台输出实现类为org.apache.log4j.ConsoleAppender
log4j.rootLogger=ERROR, A1
log4j.logger.com.xuezi.testlog.TestLog=DEBUG
#配置Appender A1,输出到控制台,使用正则表达式布局
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Threshold=DEBUG #DEBUG以上级别输出时
log4j.appender.A1.Encoding=UTF-8 #编码方式
log4j.appender.A1.ImmediateFlush=true #是否立即输出
log4j.appender.A1.layout=org.apache.log4j.PatternLayout #输出格式,表达式配置
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS}[%C]-[%p] %m%n
输出到文件
文件输出是指将日志输出到指定文件,文件输出的实现类为org.apache.log4j.FileAppender,配置时需要用File指定文件名称。可以用相对路径,也可以使用绝对路径
log4j.logger.com.xuezi.TestLog=DEBUG, f
log4j.appender.f = org.apache.log4j.FileAppender #输出到文件
log4j.appender.f.File=E:/LogTest/dmc.log #文件位置
log4j.appender.f.Append=true #追加文件内容 如果设置为false则Logger初始化时会清除掉原来的文件内容,重启日志丢失
log4j.appender.f.layout=org.apache.log4j.PatternLayout #输出格式,表达式配置
log4j.appender.f.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS}[%C]-[%p] %m%n
输出到按大小滚动文件
把文件输出到指定文件,文件达到指定大小时,会自动更名。按尺寸滚动文件输出类为org.apache.log4j.RollingFileAppender
log4j.logger.com.xuezi.TestLog=DEBUG, f, rolling_file #Logger支持多个Appender,用逗号隔开
...
log4j.appender.rolling_file=org.apache.log4j.RollingFileAppender #输出到滚动文件
log4j.appender.rolling_file.Threshold=DEBUG #DEBUG以上才是用
log4j.appender.rolling_file.File=E:/TestLog/rolling.log #滚动文件名
log4j.appender.rolling_file.Append=true #追加方式
log4j.appender.rolling_file.MaxFileSize=10KB #文件达到10KB就自动更名
log4j.appender.rolling_file.MaxBackupIndex=100 #最多备份100个文件
log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout #输出格式,表达式配置
log4j.appender.rolling_file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS}[%C]-[%p] %m%n
配置的滚动文件名为rolling.log,文件最大为10KB。当rolling.log达到10KB是时,会自动更名为rolling.log.1、rolling.log.2.、直到rolling.log.100
输出到按日期滚动文件
将日志输出到指定文件,当日期发生变化时,会将文件按指定的日期格式自动改名。日期滚动文件输出类为org.apache.log4j.DailyRollingFileAppender,
log4j.logger.com.xuezi.TestLog=DEBUG, rolling_file
log4j.appender.rolling_file=org.apache.log4j.DailyRollingFileAppender #滚动文件
log4j.appender.rolling_file.File=E:/rolling.log
log4j.appender.rolling_file.DatePattern=.yyyy-MM-dd #滚动日期格式
log4j.appender.rolling_file.layout=org.apache.log4j.PatternLayout #输出格式,表达式配置
log4j.appender.rolling_file.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS}[%C]-[%p] %m%n
日志文件名为rolling.log,进入新的一天,文件会被自动更名,格式为rolling.log.2018-0401
3.commons-logging控件
使用类似于Log4j,使用规则完全一样,不在赘述
注:原创不易,转载请标明出处:https://blog.csdn.net/Kermit_father