log4j
来源:互联网 发布:端口怎么复用 编辑:程序博客网 时间:2024/06/07 07:08
Log4j
什么是Log4j
Log4j 是Apache为Java提供的日志管理工具。他与System.out.println()的作用相似,用来跟踪、调试、维护程序。
Log4j核心概念
Log4j中有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout)
- Logger:用来输出日志消息的类,它可以输出不同级别的消息,例如错误消息、警告消息等;
- Appender;通常我们希望日志输出到文件中,以及控制台,也可能希望日志输出数据库,该类就表示一个输出的目标;
- Layout:对输出的消息进行格式化,例如在消息中添加日期,以及级别等。
Hello Log4j
package demo1.log4j;import org.apache.log4j.Appender;import org.apache.log4j.ConsoleAppender;import org.apache.log4j.Layout;import org.apache.log4j.Level;import org.apache.log4j.Logger;import org.apache.log4j.SimpleLayout;import org.junit.Test;public class Demo1 { @Test public void fun1() { /* * 1. 得到日志器 */ Logger logger = Logger.getLogger(Demo1.class); /* * 2. 创建格式(简单格式) */ Layout layout = new SimpleLayout(); /* * 3. 使用格式来创建目的地(控制台) */ Appender appender = new ConsoleAppender(layout); /* * 4. 把目的地给日志器 */ logger.addAppender(appender); // 设置日志器级别 logger.setLevel(Level.ALL);//只输出错误级别以上的日志 /* * 5. 输出日志 */ logger.debug("hello");//调试级别 logger.info("hello");//信息级别 logger.warn("hello");//警告级别 logger.error("hello");//错误级别 logger.fatal("hello");//大错误级别 }}
在Log4j中日志消息分为五个级别,级别由高到低排列如下:
- FATAL:重大错误,例如系统崩溃;
- ERROR:错误,例如某模块瘫痪;
- WARN:警告,程序的隐患,如果不处理,将来可能就是错误;
- INFO:信息,可以用来查看程序执行的流程;
- DEBUG:调试,用来调试程序的bug。
日志器名称
在创建日志器时,需要给日志器指定一个名称:Logger log = Logger.getLogger(“hello”);
日志器的名称不只是一个名称而已,日志器的名称说明了日志器之间的父子关系。子日志器会继承父日志器的Appender和Level。
@Testpublic void fun2() { Logger log = Logger.getLogger("com.company"); Appender appender = new ConsoleAppender(new SimpleLayout()); log.addAppender(appender); log.setLevel(Level.INFO); Logger log1 = Logger.getLogger("com.company.logger"); log1.debug("看不见!"); log1.warn("看的见!!!");}
log1日志器继承了log日志器的格式化器和日志等级
通常我们创建日志器都是使用当前类的名称来创建:Logger log = Logger.getLogger(Demo.class.getName());这样我们可以通过配置父日志器来改变日志器的Appender和Level。
log4j配置概述
log4j有两种配置文件,log4j.properties和log4j.xml。因为log4j是比较简单的组件,所以建议使用log4j.properties。
如果你把log4j放到项目的src下(即放到classes下),并且命名为log4j.properties,那么log4j会自动加载这个配置文件,这也是我们最为常用的方式。
根日志器
在配置文件中,需要配置名为log4j.rootLogger的日志器,它就是根日志器。其他的日志器都是根日志器的子日志器,会继承根日志器的目的地,以及级别等。
log4j.properties
log4j.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表示简化格式化器。
Appender
Appender是用来指定输出目标的类,你可以叫它目的地。上面我们使用的ConsoleAppender就是用来向控制台输出的目的地。常用的目的地有:
- ConsoleAppender:向控制台输出日志;
- FileAppender:向文件输出日志
- DailyRollingFileAppender:向文件输出日志,每天一个日志文件;
- RollingFileAppender:向文件输出日志,当文件大小达到指定大小后,生成新文件;
ConsoleAppender
- ConsoleAppender的目标是控制台!这也不多做解释
- FileAppender的目标是磁盘文件
log4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.FileAppenderlog4j.appender.A1.File=log.txtlog4j.appender.A1.Append=truelog4j.appender.A1.layout=org.apache.log4j.SimpleLayout
指定A1发送器的目标文件为log.txt指定追加方式为true,即不会覆盖原有日志信息。默认即为true,所以可以不给出这个配置指定发送器的格式化器为简单格式化器
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文件。
log4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.RollingFileAppenderlog4j.appender.A1FILE.File=log.txtlog4j.appender.A1.MaxFileSize=1KBlog4j.appender.A1.MaxBackupIndex=3log4j.appender.A1.layout=org.apache.log4j.SimpleLayout
指定A1发送器的类型指定A1发送器的目标文件指定文件大小上限为1KB指定多少个日志文件指定格式化器类型
DailyRollingFileAppender
DailyRollingFileAppender会根据设定的时间频率生成备份文件。
- 当时间频率为yyyy-MM:按月生成备份文件;
- 当时间频率为yyyy-ww:按周生成备份文件;
- 当时间频率为yyyy-MM-dd:按天生成备份文件;
- 当时间频率为yyyy-MM-dd-a:每天生成两次备份;
- 当时间频率为yyyy-MM-dd-HH:按小时生成备份文件;
- 当时间频率为yyyy-MM-dd-HH-mm:按分钟生成备份文件。
log4j.rootLogger=DEBUG,A1log4j.appender.A1=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.A1.File=log.txtlog4j.appender.A1.DatePattern='.'yyyy-MM-ddlog4j.appender.A1.layout=org.apache.log4j.SimpleLayout
指定A1发送器的类型指定A1发送器的目标文件指定A1发送器的时间频率为每天生成一个备份文件。时间频率也是备份文件的后缀名,例如:log.txt.2013-05-06,如果没有给出’.’,那么就是log.txt2013-05-06
Layout
我们需要给目的地指定格式化器,这样目的地就可以按照格式化器指定的格式来输出日志信息了。我们刚刚一直都在使用SimpleLayout格式化器,而我们常用的格式化器是PatternLayout!
PatternLayout
可以为PatternLayout指定一个模板,目的地会按模板来输出日志信息。例如模板为:hello: %m,其中%m是一个模式字符,下面介绍一下模式字符:
- %m:信息本身;
- %c:日志器的名称;
- %d:日期,还可以指定日期的格式,例如:%d{yyyy-MM-dd HH:mm:ss};
- %p:日志级别;
- %n:换行;
- %t:当前线程;
- %l:输出日志的Java类相关信息。
log4j.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]%n#指定tomcat的logs目录存放日志文件,如果希望存放到项目目录下,可以使用绝对路径。log4j.appender.f1.File=${catalina.home}/logs/myproject.txtlog4j.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
- log4j
- log4j
- log4j
- log4j
- log4j
- log4j
- log4j
- Log4J
- Log4j
- log4j
- log4j
- Log4j
- Log4j
- log4j
- Log4J
- log4j
- Log4j
- Log4J
- linux安装配置nginx
- ASP.NET, IE6下URL中文乱码问题 ASP.NET程序,当URL后缀包含奇数个中文字符
- VSWeb开发之[Web Essentials 压缩js]
- SQL数据库。按年,月,日查询
- 此地址访问受限:此地址使用了一个通常应该用于其他网页浏览的端口。由于安全原因,Firefox 取消了该请求
- log4j
- excel2000 里的游戏
- Impala原理、使用
- 点击清空文本框+++文本杠上敲回车提交
- 请求的值。respone.form有潜在的危险
- 取消系统粘滞键怎么设置?
- js 异常处理 错误不弹出窗口
- 照片墙
- 水波形图片切换