您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > log4j配置文件详解附实例
log4j配置文件有三个主要的组件:Logger,Appender和Layout,分别为日志类型,日志输出目的地,日志输出格式。log4j.rootLogger=[level],appenderName,appenderName,...(level是错误级别,appenderName是输出目的地,本例设为mylog,可以定义多个)level优先级分别为FATAL、ERROR、WARN、INFO、DEBUG5个级别.通过定义的级别,你可以控制程序中的日志输出.比如在这里定义了ERROR级别,程序中只有FARAL、ERROR级别的LOG会被输出.log4j.appender.mylog=输出目的地(这里的appenderName是在前面定义的,可任意起名)Log4j提供的输出目的地有以下几种:org.apache.log4j.ConsoleAppender(控制台)org.apache.log4j.FileAppender(文件)org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)org.apache.log4j.RollingFileAppender(文件到达指定大小时产生一个新文件)org.apache.log4j.WriterAppender(将日志信息以流格式发送到任何地方)log4j.appender.filelog.File=yourfiledirlog4j.appender.filelog.MaxFileSize=yourfilesizelog4j.appender.mylog.MaxBackupIndex=num设置保存备份文件数量log4j.appender.appenderName.layout=布局类型(设置布局类型)Log4j提供的layout有以下4种:org.apache.log4j.HTMLLayout(以HTML表格形式布局)org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)org.apache.log4j.PatternLayout(可以灵活地指定布局模式)如果使用PatternLayout布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:%m输出代码中指定的消息%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL%r输出自应用启动到输出该log信息耗费的毫秒数%c输出所属的类目,通常就是所在类的全名%t输出产生该日志事件的线程名%n输出一个回车换行符,Windows为rn,Unix为n%d输出日志时间,比如:%d{yyyyMMMddHH:mm:ss,SSS},输出:2007年5月17日19:30:00,000%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数[QC]是log信息的开头,可以为任意字符,一般为项目简称程序中并没有直接用到log4j的类,而是使用了commons-logging提供的日志类。commons-logging是为所有的Java日志实现提供一个统一的接口,它的功能据说“平常弱”。Log(基本记录器)和LogFactory(负责创建Log实例)。当commons-logging.jar被加入到CLASSPATH之后,它会合理地猜测你喜欢的日志工具,然后进行自我设置,用户根本不需要做任何设置。默认的LogFactory是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止):1.寻找当前factory中名叫org.apache.commons.logging.Log配置属性的值2.寻找系统中属性中名叫org.apache.commons.logging.Log的值3.如果应用程序的classpath中有log4j,则使用相关的包装(wrapper)类(Log4JLogger)4.如果应用程序运行在jdk1.4的系统中,使用相关的包装类(Jdk14Logger)5.使用简易日志包装类(SimpleLog)log4j配置详解--------------------------------------------------------------------------------log4j配置详解log4j详解根据网络资料整理1.概述1.1.背景在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息。最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类来封装此类操作,而不是让一系列的打印语句充斥了代码的主体。1.2.Log4j简介在强调可重用组件开发的今天,除了自己从头到尾开发一个可重用的日志操作类外,Apache为我们提供了一个强有力的日志操作包-Log4j。Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件、甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。此外,通过Log4j其他语言接口,您可以在C、C++、.Net、PL/SQL程序中使用Log4j,其语法和用法与在Java程序中一样,使得多语言分布式系统得到一个统一一致的日志组件模块。而且,通过使用各种第三方扩展,您可以很方便地将Log4j集成到J2EE、JINI甚至是SNMP应用中。本文介绍的Log4j版本是1.2.3。作者试图通过一个简单的客户/服务器Java程序例子对比使用与不使用Log4j1.2.3的差别,并详细讲解了在实践中最常使用Log4j的方法和步骤。在强调可重用组件开发的今天,相信Log4j将会给广大的设计开发人员带来方便。加入到Log4j的队伍来吧!2.一个简单的例子我们先来看一个简单的例子,它是一个用Java实现的客户/服务器网络程序。刚开始我们不使用Log4j,而是使用了一系列的打印语句,然后我们将使用Log4j来实现它的日志功能。这样,大家就可以清楚地比较出前后两个代码的差别。2.1.不使用Log4j2.1.1.客户程序packagelog4j;importjava.io.*;importjava.net.*;publicclassClientWithoutLog4j{publicstaticvoidmain(Stringargs[]){Stringwelcome=null;Stringresponse=null;BufferedReaderreader=null;PrintWriterwriter=null;InputStreamin=null;OutputStreamout=null;Socketclient=null;try{client=newSocket(localhost,8001);System.out.println(info:Clientsocket:+client);in=client.getInputStream();out=client.getOutputStream();}catch(IOExceptione){System.out.println(error:IOException:+e);System.exit(0);}try{reader=newBufferedReader(newInputStreamReader(in));writer=newPrintWriter(newOutputStreamWriter(out),true);welcome=reader.readLine();System.out.println(debug:Serversays:'+welcome+');System.out.println(debug:HELLO);writer.println(HELLO);response=reader.readLine();System.out.println(debug:Serverresponds:'+response+');System.out.println(debug:HELP);writer.println(HELP);response=reader.readLine();System.out.println(debug:Serverresponds:'+response+');System.out.println(debug:QUIT);writer.println(QUIT);}catch(IOExceptione){System.out.println(warn:IOExceptioninclient.in.readln());System.out.println(e);}try{Thread.sleep(2000);}catch(Exceptionignored){}}}2.1.2.服务器程序packagelog4j;importjava.util.*;importjava.io.*;importjava.net.*;publicclassServerWithoutLog4j{finalstaticintSERVER_PORT=8001;//thisserver'sportpublicstaticvoidmain(Stringargs[]){StringclientRequest=null;BufferedReaderreader=null;PrintWriterwriter=null;ServerSocketserver=null;Socketsocket=null;InputStreamin=null;OutputStreamout=null;try{server=newServerSocket(SERVER_PORT);System.out.println(info:ServerSocketbeforeaccept:+server);System.out.println(info:Javaserverwithoutlog4j,on-line!);//waitforclient'sconnectionsocket=server.accept();System.out.println(info:ServerSocketafteraccept:+server);in=socket.getInputStream();out=socket.getOutputStream();}catch(IOExceptione){System.out.println(error:ServerconstructorIOException:+e);System.exit(0);}reader=newBufferedReader(newInputStreamReader(in));writer=newPrintWriter(newOutputStreamWriter(out),true);//sendwelcomestringtoclientwriter.println(Javaserverwithoutlog4j,+newDate());while(true){try{//readfromclientclientRequest=reader.readLine();System.out.println(debug:Clientsays:+clientRequest);if(clientRequest.st
本文标题:log4j配置文件详解附实例
链接地址:https://www.777doc.com/doc-5498211 .html