您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 使用Log4j进行日志操作
使用Log4j进行日志操作一、Log4j简介(1)概述Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接字服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些只需要通过一个属性配置文件来灵活地进行配置,而不需要修改应用的代码。因为目前在Java中最有名的Log方式,首推是Log4j,另外JDK1.4中也提供了LoggingAPI。Log4j是在jakartaapache项目下开发的一个开源的日志记录工具。(2)应用的目的当你在开发程序的时候,调试(debugging)和日志(logging)都是非常重要的工作。在应用中使用日志主要有三个目的监视代码中的变量的变化情况,把数据周期性地记录到文件中供其它应用进行统计分析工作跟踪代码运行的轨迹,作为日后审计的依据担当集成开发环境中的调试器,向文件或者控制台打印代码的调试信息而实现这些应用的常规方式是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。(3)优点采用Log4j进行日志操作的整个过程相当简单明了,与直接使用System.out.println语句进行日志信息输出的方式相比,基本上没有增加代码量,同时能够清楚地理解每一条日志信息的重要程度。通过控制配置文件,我们还可以灵活地修改日志信息的格式,输出目的地等等方面,而单纯依靠System.out.println语句,显然需要做更多的工作。(4)与System.out.println()的对比log4j提供分级方法在程序中嵌入日志记录语句。日志信息具有多种输出格式和多个输出级别。程序开发环境中的日志记录是由嵌入在程序中以输出一些对开发人员有用信息的语句所组成。例如,跟踪语句(trace),结构转储和常见的System.out.println或printf调试语句。使用一个专门的日志记录包,可以减轻对成千上万的System.out.println语句的维护成本因为日志记录可以通过配置脚本在运行时得以控制。log4j维护嵌入在程序代码中的日志记录语句,通过属性配置文件可以快速地规范日志记录的处理过程。(5)log4j的其它特性log4j已经被移植到C,C++,C#,Perl,Python,Ruby,Eiffel几种语言。log4j有三种主要的组件:记录器(Loggers),存放器(Appenders),布局(Layouts)这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和位置。记录器(记录器可不关心log数据存放的事,应该是存放器的事)。log4j允许程序员定义多个记录器,每个记录器有自己的名字。有一个记录器叫根记录器,它永远存在并且是类别等级的起始,且不能通过名字检索或引用,可以通过Logger.getRootLogger()方法取得它,而一般记录器通过Logger.getLogger(Stringname)方法。记录器使用点式标记来进行命名并且也具有继承的特性。记录器还有一个重要的属性,就是级别。(这好理解,就象一个家庭中,成员间存在辈份关系,但不同的成员的身高可能不一样,且身高与辈份无关)程序员可以给不同的记录器赋以不同的级别,如果某个成员没有被明确级别,就自动继承最近的一个有级别长辈的级别值。二、下载并安置Log4j的*.jar包(1)下载log4j发行版并将该*.jar包添加到CLASSPATH环境变量中。(2)Logger类的基本方法packageorg.apache.log4j;publicclassLogger{//Creation&retrievalmethods:publicstaticLoggergetRootLogger();publicstaticLoggergetLogger(Stringname);//printingmethods:publicvoiddebug(Objectmessage);publicvoidinfo(Objectmessage);publicvoidwarn(Objectmessage);publicvoiderror(Objectmessage);publicvoidfatal(Objectmessage);//genericprintingmethod:publicvoidlog(Levell,Objectmessage);}三、Apache的Log4j的编程实现下面看一下在JCreator中实现log4j的例子。1、打开或者新建一个Java程序(1)(2)内容如下,详细代码请见源程序publicclassUserLog4jWithJCreate{publicUserLog4jWithJCreate(){}publicstaticvoidmain(String[]args){UserLog4jWithJCreatemainObj=newUserLog4jWithJCreate();}}2、在程序所在的目录下新建一个配置文件log4j.properties(1)(2)文件的内容如下#configrootloggerlog4j.rootLogger=INFO,system.outlog4j.appender.system.out=org.apache.log4j.ConsoleAppenderlog4j.appender.system.out.layout=org.apache.log4j.PatternLayoutlog4j.appender.system.out.layout.ConversionPattern=this4j--%5p{%F:%L}-%m%n#configthisProject.fileloggerlog4j.logger.thisProject.file=INFO,thisProject.file.outlog4j.appender.thisProject.file.out=org.apache.log4j.DailyRollingFileAppenderlog4j.appender.thisProject.file.out.File=logContentFile.loglog4j.appender.thisProject.file.out.layout=org.apache.log4j.PatternLayout3、在JCreator中引入Log4j的apacheJar包log4j-1.2.8.jar到本程序中输出的信息前导符输出log信息的文件名称4、编程该程序以使用Log4j(1)引入与log4j相关的包importorg.apache.log4j.PropertyConfigurator;importorg.apache.log4j.Logger;(2)读其配置文件PropertyConfigurator.configure(log4j.properties);(3)获得总的输出对象并向控制台输出信息LoggerloggerConsole=Logger.getRootLogger();loggerConsole.info(这是在JCreator中向控制台输出的一般信息文字);loggerConsole.warn(这是在JCreator中向控制台输出的警告类别的信息文字);(4)获得文件输出对象并向文件中输出信息LoggerloggerFile=Logger.getLogger(thisProject.file);loggerFile.warn(这是在JCreator中向指定的log文件中输出的警告类别的信息文字);(5)最后总的程序为importorg.apache.log4j.PropertyConfigurator;importorg.apache.log4j.Logger;publicclassUserLog4jWithJCreate{publicUserLog4jWithJCreate(){PropertyConfigurator.configure(log4j.properties);LoggerloggerConsole=Logger.getRootLogger();loggerConsole.info(这是在JCreator中向控制台输出的一般信息文字);loggerConsole.warn(这是在JCreator中向控制台输出的警告类别的信息文字);LoggerloggerFile=Logger.getLogger(thisProject.file);loggerFile.warn(这是在JCreator中向指定的log文件中输出的警告类别的信息文字);}publicstaticvoidmain(String[]args){UserLog4jWithJCreatemainObj=newUserLog4jWithJCreate();}}5、执行该Java程序(1)观看其控制台上的输出,并注意其输出的信息格式(2)观看其磁盘文件的输出有了这样一个直观的例子感受,我们就可以进一步的讨论。四、log信息的级别(1)五个log信息的级别Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUGINFOWARNERRORFATAL。如果一条log信息的级别,大于等于记录器的级别值,那么记录器就会记录它,否则则不记录。staticLevelDEBUG:DEBUGLevel指出细粒度信息事件对调试应用程序是非常有帮助的。staticLevelINFO:INFOlevel表明消息在粗粒度级别上突出强调应用程序的运行过程。staticLevelWARN:WARNlevel表明会出现潜在错误的情形。staticLevelERROR:ERRORlevel指出虽然发生错误事件,但仍然不影响系统的继续运行。staticLevelFATAL:FATALlevel指出每个严重的错误事件将会导致应用程序的退出。另外,还有两个可用的特别的日志记录级别:(以下描述来自log4jAPI):staticLevelALL:ALLLevel是最低等级的,用于打开所有日志记录。staticLevelOFF:OFFLevel是最高等级的,用于关闭所有日志记录。(2)下面给出参考示例来说明级别的应用//获得一个名称为“thisProject.file”的parentlogger实例Loggerparentlogger=Logger.getLogger(thisProject.file);//设置其级别为Level.INFO,一般并不需要在代码中设置,可以在属性配置文件中进行设置parentlogger.setLevel(Level.INFO);//再获得一个名称为“thisProject.file.Son”的sonlogger实例Loggersonlogger=Logger.getLogger(thisProject.file.Son);//由于warn级别大于Info级别,因此可以产生出log信息parentlogger.warn(由于warn级别大于Info级别,因此可以产生出log信息);//下面的输出将被禁止,因为parentlogger实例的级别在前面已经设置为Level.INFO,但由于DEBUGINFO,因此通过parentlogg
本文标题:使用Log4j进行日志操作
链接地址:https://www.777doc.com/doc-5042448 .html