初步探索Log4j
来源:互联网 发布:怎么开淘宝店铺步骤 编辑:程序博客网 时间:2024/06/01 15:39
介绍
在Java开发中,作为新手程序员,经常使用System.out.println语句来调试程序,一旦程序成功运行或不需要这些代码语句,就在删除掉,麻烦的是不知道有多少这样的语句藏在哪些角落。
使用Log4j就可以方便管理这些测试代码。Log4J可以在配置文件关闭所有日志,也可以打开所有日志,也可以打开某个级别的日志。甚至还可以管理日志出现的格式(是否加上日期和时间),以及日志输出的目标(是否为控制台,是否为文件)。
Log4j核心概念
Log4j有三大组件,日志器(Logger)、日志输出目标(Appender)、格式化器(Layout)
- Logger:用来输出日志消息的类,它可以输出不同级别的消息,例如错误消息、警告消息等。
- Appender:通常我们希望日志输出到文件中,以及控制台,也可能希望日志输出数据库,该类就表示一个输出的目标
- Layout:对输出的消息进行格式化,例如在消息中添加日期,以及级别等。
Demo1
javapublic static void main(String[] args) throws Exception { Logger log = Logger.getLogger(Class.forName(getClassNameForStatic())); //获取当前类的类名,创建日志器 Appender appender = new ConsoleAppender(new SimpleLayout()); //创建发送器,使用简单格式化器 BasicConfigurator.configure(appender); //加载发送器 log.setLevel(Level.ERROR); log.debug("调试,用来调试程序的bug"); log.info("信息,可以用来查看程序执行的流程"); log.warn("警告,程序的隐患,如果不处理,将来可能就是错误"); log.error("错误,例如某模块瘫痪"); log.fatal("重大错误,例如系统崩溃"); } /** * 利用匿名类静态方法获取当前类名 */ private static String getClassNameForStatic(){ return new Object(){ public String getClassNameForStatic(){ String className = this.getClass().getName(); return className.substring(0, className.lastIndexOf('$')); } }.getClassNameForStatic(); }
输出结果
ERROR - 错误,例如某模块瘫痪FATAL - 重大错误,例如系统崩溃
配置文件
在配置文件中,需要配置名为log4j.rootLogger的日志器,它就是根日志器。其他的日志器都是根日志器的子日志器,会继承根日志器的发送器,以及级别等。
根日志器
log4j.properties
javalog4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.SimpleLayout
- log4j.rootLogger表示根日志器,DEBUG是指定根日志器的输出级别,只要大于等于DEBUG级别的日志就可以输出。A1是说明发送器(Appender)的名称;
- log4j.appender.A1表示发送器,org.apache.log4j.ConsoleAppender表示发送器为控制台发送器,即输出结果在控制台上显示;
log4j.appender.A1.layout表示A1这个发送器的格式化器,org.apache.log4j.SimpleLayout表示简化格式化器。
其他日志器
除了根日志器,还可以配其他日志器,语法如下:
javalog4j.rootLogger=DEBUG,A1log4j.logger.cn.redgo=WARN,A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.SimpleLayout
我们不只配置了一个根日志器,还配置了一个名称为cn.redgo的日志器。继承关系你是懂得对吧。所有日志器如果名称是以cn.redgo前缀的,那么都会继承上面的配置,如果不是,那么继承的就是root日志器了。
Appender
Appender是用来指定输出目标的类,你可以叫它发送器。上面我们使用的ConsoleAppender就是用来向控制台输出的发送器。常用的发送器有:
- ConsoleAppender:向控制台输出日志;
- FileAppender:向文件输出日志
- DailyRollingFileAppender:向文件输出日志,每天一个日志文件
- RollingFileAppender:向文件输出日志,当文件大小达到指定大小后,生成新文件
ConsoleAppender
ConsoleAppender的目标是控制台!
javalog4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.SimpleLayout
FileAppender
FileAppender的目标是磁盘文件
javalog4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.FileAppender log4j.appender.A1.File=log.txt log4j.appender.A1.Append=true log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
上面的代码,指定发送器为A1, 同时,A1发送器的目标文件为log.txt,对文件的追加方式为true,即不会覆盖原有日志信息(默认为true,可以不给出这个配置),指定A1发送器的格式化器为简单格式化器
DailyRollingFileAppender
DailyRollingFileAppender会根据设定的时间频率生成备份文件。
- 当时间频率为yyyy-MM:按月生成备份文件
- 当时间频率为yyyy-ww:按周生成备份文件
- 当时间频率为yyyy-MM-dd:按天生成备份文件
- 当时间频率为yyyy-MM-dd-a:每天生成两次备份
- 当时间频率为yyyy-MM-dd-HH:按小时生成备份文件
- 当时间频率为yyyy-MM-dd-HH-mm:按分钟生成备份文件
javalog4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=log.txt log4j.appender.A1.DatePattern='.'yyyy-MM-dd log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
RollingFileAppender
RollingFileAppender是FileAppender的子类,它的作用是当日志文件大小超出文件大小大限时,会把日志文件转换成备份文件,然后再生成一个新的日志文件。
例如日志文件名为log.txt,设置文件大小上限为1KB,当log.txt文件的大小超出了1KB后,把log.txt的名称转换成log.txt.1,然后再生成一个log.txt,新的日志会写入到新的log.txt文件中。当log.txt的大小再次达到1KB时,把log.txt.1名称修改成log.txt.2,把log.txt修改成log.txt.1,然后再生成一个新的log.txt文件。
还可以设置文件的个数,当设置备份文件的个数为3时,表示最多可以有3个文件。当文件达到3后,再次达到1KB时,那么会删除最后一个文件。例如当前已经存在log.txt、log.txt.1、log.txt.2,这时如果log.txt又达到了1KB时,那么删除log.txt.2,然后把log.txt.1修改成log.txt.2,再把log.txt修改成log.txt.1,然后再创建log.txt文件。
javalog4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.RollingFileAppender log4j.appender.A1FILE.File=log.txt log4j.appender.A1.MaxFileSize=1KB log4j.appender.A1.MaxBackupIndex=3 log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
Layout
我们需要给发送器指定格式化器,这样发送器就可以按照格式化器指定的格式来输出日志信息了。SimpleLayout格式化器是一般不太正规的用法,而程序员常用的格式化器是PatternLayout!
PatternLayout
可以为PatternLayout指定一个模板,发送器会按模板来输出日志信息。例如模板为:hello: %m,其中%m是一个模式字符,下面介绍一下模式字符:
- %m:信息本身
- %c:日志器的名称
- %d:日期,还可以指定日期的格式,例如:%d{yyyy-MM-dd HH:mm:ss}
- %p:日志级别
- %n:换行
- %t:当前线程
- %l:输出日志的Java类相关信息
在Web项目中的配置
javalog4j.rootLogger=INFO,c1, f1log4j.appender.c1=org.apache.log4j.ConsoleAppenderlog4j.appender.c1.layout=org.apache.log4j.PatternLayoutlog4j.appender.c1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m [%t] %c [%l]%nlog4j.appender.f1.File=${catalina.home}/logs/myproject.txt log4j.appender.f1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.f1.layout=org.apache.log4j.PatternLayoutlog4j.appender.f1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %m [%t] %c [%l]%n
其中,${catalina.home}是tomcat的路径
- 初步探索Log4j
- 动态规划初步探索
- memcache初步探索
- BT 的初步探索
- 初步探索Java反射
- 初步探索fastJson
- 初步探索CKEditor
- Apache Stratos初步探索
- javax.comm初步探索
- Meteor初步探索
- Dagger2(初步探索一)
- Dagger2(初步探索二)
- VCNN初步探索
- mqtt之初步探索
- 初步探索NFC开发
- spring源码初步探索
- 初步探索python
- FlexboxLayout初步探索一
- webapp弹层
- SQL Server游标的使用
- Swift Compiler Error Binary oprator '+' cannot be applied to operands of type 'UInt16' and 'UInt8'
- 设计模式--装饰模式(Decorator)
- hdu 2883 kebab
- 初步探索Log4j
- LeetCode Binary Tree Zigzag Level Order Traversal
- 使用WinDug查内存泄露
- STM32之系统重启
- GraphicsMagick和im4java按比例压缩图片
- 20150706
- C#读写txt文件的两种方法介绍
- windows下如何查看端口占用的程序
- 从ViewRootImpl类分析View绘制的流程