已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1. 概述Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。2. Logger:日志写出器继承Category,Logger对象是用来取代System.out或者System.err的日志写出器,2.1. 获得对象用来供程序员输出日志信息。调用Logger.getLogger(Class clazz)以获得logger。2.2. 输入方法public void debug(Object msg); public void debug(Object msg, Throwable t); public void info(Object msg); public void info(Object msg, Throwable t); public void warn(Object msg); public void warn(Object msg, Throwable t); public void error(Object msg); public void error(Object msg, Throwable t); public void fatal(Object msg); public void fatal(Object msg, Throwable t); / Generic printing method : public void log(Level l, Object msg);2.3. 级别每个logger都被分配了一个日志级别 (log level),用来控制日志信息的输出。未被分配level的logger将继承它最近的父logger的level。大小关系如下:DEBUG INFO WARN ERROR 3. Appender:日志目的地每个logger都可以拥有一个或者多个appender,每个appender表示一个日志的输出目的地。有ConsoleAppender、FileAppender、RollingFileAppender3.1. ConsoleAppender可以使用ConsoleAppender对象把日志输出到控制台。每个ConsoleAppender都有一个target,表示它的输出目的地。它可以是System.out。标准输出设备(缓冲显示屏);或者是System.err,标准错误设备(不缓冲显示屏)。ConsoleAppender的使用方法参考如下API:/ 构造方法,使用一个Layout对象构造一个ConsoleAppender对象 :. / 默认情况下,ConsoleAppender的target是System.out :. public ConsoleAppender(Layout layout); / target的可能取值为ConsoleAppender.SYSTEM_OUT和ConsoleAppender.SYSTEM_ERR :. public ConsoleAppender(Layout layout, String target);3.2. FileAppender可以使用FileAppender对象把日志输出到一个指定的日志文件中去。使用方法可以参考如下的API :.- Log4j APIs : class FileAppender extends WriterAppender -/ 构造方法,使用一个Layout对象和日志文件名构造一个FileAppender对象 :.public FileAppender(Layout layout, String filename)throws IOException;public FileAppender(Layout layout, String filename, boolean append)throws IOException;3.3. RollingFileAppender可以使用FileAppender的子类RollingFileAppender对象,把日志输出到一个指定的日志文件中。不同的是该日志文件的大小受到限制,当日志内容超出最大的尺寸时,该文件将向上滚动(最老的日志被擦除)。还可以在该类对象中指定为日志文件做多少个备份。具体使用方法参考如下API :. - Log4j APIs : class RollingFileAppender extends FileAppender -/ 构造方法,使用一个Layout对象和日志文件名构造一个RollingFileAppender对象 :.public RollingFileAppender(Layout layout, String filename)throws IOException;public RollingFileAppender(Layout layout, String filename, boolean append)throws IOException;/ 获得和设置日志备份文件的个数 :.public int getMaxBackupIndex();public void setMaxBackupIndex(int index);/ 获得和设置滚动日志文件的最大尺寸 :.public long getMaximumFileSize();public void setMaximumFileSize(long size);4. Layout:日志格式化器每个appender都和一个layout相联系;layout的任务是格式化用户的logging request,appender的任务是把layout格式化好的输出内容送往指定的目的地。5. PatternLayoutPatternLayout是Layout的一个子类,用来使用类似C语言的printf函数中使用的格式控制字符串来控制日志的输出格式。使用方法参考如下API :.- Log4j APIs : class PatternLayout extends Layout -/ 无参数构造方法,使用DEFAULT_CONVERSION_PATTERN构造一个PatternLayout :./ 注意:DEFAULT_CONVERSION_PATTERN为%m%n,只打印消息信息 :.public PatternLayout();/ 构造方法,使用自定义的pattern构造一个PatternLayout :.public PatternLayout(String pattern);/ 获得和设置PatternLayout对象的日志pattern :.public String getConversionPattern();public void setConversionPattern(String pattern);模式字符串中的模式如下: %m:消息本身 %p:消息的层次 %r:从程序开始执行到当前日志产生时的时间间隔(微秒) %c:输出当前日志动作所在的category名称。例如:如果category名称是a.b.c,%c2将会输出b.c. 2意谓着输出“以点分隔开的category名称的后两个组件”,如果 n没有,将会输出整个category名称 %t:输出当前线程的名称 %x:输出和当前线程相关联的NDC(具体解释见下文),尤其用到像java servlets这样的多客户多线程的应用中。 %n:输出平台相关的换行符。 %:输出一个%字符 %d:输出日志产生时候的日期,当然可以对日期的格式进行定制。例如:%dHH:mm:ss,SSSS或者是%ddd MMM yyyy HH:mm:ss,SSSS,如果没有指定后面的格式,将会输出ISO8601的格式。 %l:输出位置信息,相当于%C.%M(%F:%L)的组合。 %C:输出日志消息产生时所在的类名,如果类名是“test.page.Class1”%C1表示输出类名Class1,%C2输出page.Class1,而%C则输出test.page.Class1。 %M:输出日志消息产生时的方法名称 %F:输出日志消息产生时所在的文件名称 %L:输出代码中的行号6. Configuration:配置对log4j环境的配置就是对root logger的配置,包括把root logger设置为哪个级别(level);为它增加哪些appender,等等。这些可以通过设置系统属性的方法来隐式地完成,也可以在程序里调用XXXConfigurator.configure()方法来显式地完成。6.1. 默认的log4j初始化过程Logger类的静态初始化块(static initialization block)中对log4j的环境做默认的初始化。注意:如果程序员已经通过设置系统属性的方法来配置了log4j环境,则不需要再显式地调用XXXConfigurator.configure()方法来配置log4j环境了。例如:PropertyConfigurator.configure(perties);Logger的静态初始化块在完成初始化过程时将检查一系列log4j定义的系统属性。它所做的事情如下: 检查系统属性log4j.defaultInitOverride,如果该属性被设置为false,则执行初始化;否则(只要不是false,无论是什么值,甚至没有值,都是否则),跳过初始化。 把系统属性log4j.configuration的值赋给变量resource。如果该系统变量没有被定义,则把resource赋值为perties。注意:在apache的log4j文档中建议使用定义log4j.configuration系统属性的方法来设置默认的初始化文件是一个好方法。 试图把resource变量转化成为一个URL对象url。如果一般的转化方法行不通,就调用org.apache.log4j.helpers.Loader.getResource(resource, Logger.class)方法来完成转化。 如果url以.html结尾,则调用方法DOMConfigurator.configure(url)来完成初始化;否则,则调用方法PropertyConfigurator.configure(url)来完成初始化。如果url指定的资源不能被获得,则跳出初始化过程。 BasicConfigurator.configure() BasicConfigurator.configure()方法使用最简的方法配置log4j环境。注:所谓配置log4j环境,就是指配置root logger,因为所有其它的logger都是root logger的后代,所以它们(默认情况下)都将继承root logger的性质。BasicConfigurator.configure()完成的任务是: 用默认pattern创建PatternLayout对象p:PatternLayout p = new PatternLayout(%-4r%t%-5p%c%x - %m%n); 用p创建ConsoleAppender对象a,目标是system.out,标准输出设备:ConsoleAppender a = new ConsoleAppender(p,ConsoleAppender.SYSTEM_OUT); 为root logger增加一个ConsoleAppender p:rootLogger.addAppender(p); 把root logger的log level设置为DEBUG级别:rootLogger.setLevel(Level.DEBUG); 7. perties配置所有的配置工作应该在perties文件中完成,而该文件一般须放在应用程序的相同的目录中。在日志系统使用之前,我们必须首先配置log4j.配置log4j意味着增加附件器到Category并且为每一个Category设置一个Layout。category之间是有继承关系,但他们增加到perties文件中的顺序是不固定的。# 设置log4j的根category所使用的预设层次是DEBUG,而只使用A1这个附件器.log4j.rootCategory=DEBUG, A1#附件器A1被设置为控制台附件器。log4j.appender.A1=org.apache.log4j.ConsoleAppender#附件器使用的布局是PatternLayout,即模式布局log4j.appender.A1.layout=org.apache.log4j.PatternLayout#附件器A1的模式是%-4r %t %-5p %c %x - %m%n,其中%m代表消息字符串,%n代表换行符,其它以%开头的字符代表的含义如下文。log4j.appender.A1.layout.ConversionPattern=%-4r %t %-5p %c %x - %m%n8. Log4j中附件器及相关的键值参数8.1. ConsoleAppender选项Threshold=WARN:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。Target=System.err:默认情况下是:System.out,指定输出控制台8.2. FileAppender 选项Threshold=WARN:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。8.3. RollingFileAppender 选项Threshold=WARN:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。MaxFileSize=100KB: 后缀可以是KB, MB 或者是 GB. 在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。MaxBackupIndex=2:指定可以产生的滚动文件的最大数。8.4. DailyRollingFileAppender 选项Threshold=WARN:指定日志消息的输出最低层次。ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。File=mylog.txt:指定消息输出到mylog.txt文件。Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。DatePattern=.yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:1).yyyy-MM: 每月2).yyyy-ww: 每周3).yyyy-MM-dd: 每天4).yyyy-MM-dd-a: 每天两次5).yyyy-MM-dd-HH: 每小时6).yyyy-MM-dd-HH-mm: 每分钟8.5. PatternLayout 选项ConversionPattern=%m%n :指定怎样格式化指定的消息。8.6. HTMLLayout 选项LocationInfo=true:默认值是false,输出java文件名称和行号Title=my app file: 默认值是 Log4J Log Messages.8.7. XMLLayout 选项LocationInfo=true:默认值是false,输出java文件和行号9. log4j使用示例9.1. 输出到控制台log4j.rootLogger=DEBUG,CONSOLE.apache=truelog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.Threshold=DEBUGlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.appender.CONSOLE.layout.ConversionPattern= %d - %c -%-4r %t %-5p %c %x - %m%n9.2. 输入到文件log4j.rootLogger=DEBUG,FILE.apache=truelog4j.appender.FILE=org.apache.log4j.FileAppenderlog4j.appender.FILE.File=file.loglog4j.appender.FILE.Append=falselog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.ConversionPattern= %d - %c -%-4r %t %-5p %c %x - %m%n9.3. 输入到回滚文件log4j.rootLogger=DEBUG,ROLLING_FILE.apache=truelog4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppenderlog4j.appender.ROLLING_FILE.Threshold=ERRORlog4j.appender.ROLLING_FILE.File=rolling.loglog4j.appender.ROLLING_FILE.Append=truelog4j.appender.ROLLING_FILE.MaxFileSize=10KBlog4j.appender.ROLLING_FILE.MaxBackupIndex=1log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.ROLLING_FILE.layout.ConversionPattern=%d - %c -%-4r %t - %m%n9.4. 按一定的频度滚动日志记录文件log4j.rootLogger=DEBUG,.apache=truelog4j.appender.file=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.file.DatePattern=.yyyy-MM-ddlog4j.appender.file.File=stat.loglog4j.appender.file.Append=truelog4j.appender.file.Threshold=INFOlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%c %x - %m%n9.5. 发送日志邮件log4j.rootLogger=DEBUG,MAIL.apache=truelog4j.appender.MAIL=.SM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- TCECS 1412-2023 西北村镇地热能供暖利用技术导则
- 剪辑师面试题及答案
- 鸿星尔克(厦门)实业面试题及答案
- 互联网汽车解决方案研究报告
- 公务员面试胖面试题及答案
- 公务员面试面试题及答案
- 公务员面试空姐面试题及答案
- 公务员面试剧本面试题及答案
- 广药集团招聘试题及答案
- 工艺整合招聘真题及答案
- DB41∕T 1244-2022 食用菌主要病虫害防控技术规程
- 2025-2030年中国慢性伤口管理行业市场现状供需分析及投资评估规划分析研究报告
- 物流安全品质管理制度
- 干扰素的作用机制及临床应用
- 患者知情同意及告知培训
- 2025年人教版小学二年级上册趣味数学竞赛测试题(附参考答案)
- 冰雪运动赛事组织与管理的优化策略论文
- 单项选择之名词性从句-2025年天津高考英语复习专练(解析版)
- (2025修订版)CAAC无人机理论考试题库(含答案)
- 2025年工伤和解协议书范本
- 【MOOC】《控制工程基础》(东南大学)章节中国大学慕课答案
评论
0/150
提交评论