log4j的配置及使用.docx
- 文档编号:23986360
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:15
- 大小:22.35KB
log4j的配置及使用.docx
《log4j的配置及使用.docx》由会员分享,可在线阅读,更多相关《log4j的配置及使用.docx(15页珍藏版)》请在冰豆网上搜索。
log4j的配置及使用
log4j配置文件
第一条:
Log4j和commons-log4j不是同一个记日志的工具
1、定义配置文件
首先使用配置文件将使我们的应用程序更加灵活,配置log日志输出方式包括:
输出优先级、输出目的地、输出格式。
Log4j支持两种配置文件格式:
一种是XML格式的文件(参见chap9/config/log4j.xml,ContextListener.java对该配置文件作了相应的处理),另一种是Java特性文件log4j.properties(键=值)。
下面将介绍使用log4j.properties文件作为配置文件的方法:
log4j.[loggername]=[level],appenderName,appenderName.....
①配置根Logger,其语法为:
log4j.rootLogger=[level],appenderName,appenderName,…
其中,level是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG(注意:
级别只能设置为其中的一个,不能同时设置2个级别)。
通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。
比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
appenderName就是指定日志信息输出到哪个地方。
可同时指定多个输出目的地。
②配置日志信息输出目的地Appender,其语法为:
log4j.appender.appenderName=有效的appender类的全名
log4j.appender.appenderName.option1=value1
…….
log4j.appender.appenderName.option=valueN
其中,Log4j提供的appender类有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
③配置日志信息的格式(布局),其语法为:
log4j.appender.appenderName.layout=有效的layout类的全名
log4j.appender.appenderName.layout.option1=value1
…
log4j.appender.appenderName.layout.option=valueN
其中,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
各种布局的具体的输出形式(格式化输出信息)由各个布局的具体方法来设定,例如PatternLayout布局中有getConversionPattern()方法
Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:
%m输出代码中指定的消息—即程序中所做的日志
%p输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r输出自应用启动到输出该log信息耗费的毫秒数
%c输出所属的类目,通常就是所在类的全名
%t输出产生该日志事件的线程名
%n输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:
%d{yyyMMMddHH:
mm:
ss,SSS},输出类似:
2002年10月18日22:
10:
28,921
%l输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
2读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
BasicConfigurator.configure():
自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure(StringconfigFilename):
读取使用Java的特性文件编写的配置文件。
例:
PropertyConfigurator.configure(".\\src\\log4j.properties")
DOMConfigurator.configure(Stringfilename):
读取XML形式的配置文件。
1.Log4j简介
Log4j是Apache的一个开源项目,它允许开发者以任意间隔输出日志信息。
Log4j主要由三大类组件构成:
1)Logger-负责输出日志信息,并能够对日志信息进行分类筛选,即决定哪些日志信息应该被输出,哪些该被忽略。
Loggers组件输出日志信息时分为5个级别:
DEBUG、INFO、WARN、ERROR、FATAL。
这五个级别的顺序是:
DEBUG 如果设置某个Logger组件的级别是P,则只有级别比P高的日志信息才能输出。 Logger是有继承关系的,最上层是rootLogger,定义的其他Logger都会继承rootLogger。 2)Appender-定义了日志输出目的地,指定日志信息应该被输出到什么地方。 输出的目的地可以是控制台、文件或网络设备。 3)Layout格式化输出。 一个Logger可以有多个Appender,每个Appender对应一个Layout。 2.Loggers Logger的定义格式: log4j.[loggername]=[level],appenderName,appenderName,… 3.Appenders Appender的定义格式: log4j.appender.appenderName = fully.qualified.name.of.appender.class // "fully.qualified.name.of.appender.class" 可以指定下面五个目的地中的一个: Appender类名 作用 org.apache.log4j.ConsoleAppender 将日志输出到控制台 org.apache.log4j.FileAppender 将日志输出到文件 org.apache.log4j.DailyRollingFileAppender 每天产生一个日志文件 org.apache.log4j.RollingFileAppender 文件大小到达指定尺寸时产生一个新的文件 org.apache.log4j.WriterAppender 将日志信息以流格式发送到任意指定的地方 1)ConsoleAppender选项 -Threshold=WARN: 指定日志消息的输出最低层次。 -ImmediateFlush=true: 默认值是true,意谓着所有的消息都会被立即输出。 -Target=System.err: 默认情况下是: System.out,指定输出控制台。 2)FileAppender 选项 -Threshold=WARN: 指定日志消息的输出最低层次。 -ImmediateFlush=true: 默认值是true,意谓着所有的消息都会被立即输出。 -File=mylog.txt: 指定消息输出到mylog.txt文件。 - Append=false: 默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 3)DailyRollingFileAppender 选项 -Threshold=WARN: 指定日志消息的输出最低层次。 -ImmediateFlush=true: 默认值是true,意谓着所有的消息都会被立即输出。 -File=mylog.txt: 指定消息输出到mylog.txt文件。 -Append=false: 默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。 -DatePattern='.'yyyy-ww: 每周滚动一次文件,即每周产生一个新的文件。 当然也可以指定按月、周、天、时和分。 即对应的格式如下: '.'yyyy-MM: 每月 '.'yyyy-ww: 每周 '.'yyyy-MM-dd: 每天 '.'yyyy-MM-dd-a: 每天两次 '.'yyyy-MM-dd-HH: 每小时 '.'yyyy-MM-dd-HH-mm: 每分钟 4)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: 指定可以产生的滚动文件的最大数。 4.Layouts Layout的定义格式: 部分一log4j.appender.appenderName.layout =… //"fully.qualified.name.of.layout.class" 可以指定下面4个格式中的一个: Layout类及其作用列表 Layout类名 作用 org.apache.log4j.HTMLLayout 以HTML表格形式布局 org.apache.log4j.PatternLayout 可以灵活地指定布局模式 org.apache.log4j.SimpleLayout 包含日志信息的级别和信息字符串 org.apache.log4j.TTCCLayout 包含日志产生的时间、线程、类别等等信息 1)HTMLLayout 选项 -LocationInfo=true: 默认值是false,输出java文件名称和行号。 -Title=my app file: 默认值是 Log4J Log Messages。 2)PatternLayout 选项 - ConversionPattern=%m%n : 指定怎样格式化指定的消息。 3)XMLLayout 选项 -LocationInfo=true: 默认值是false,输出java文件和行号。 部分二 log4j.appender.A1.layout.ConversionPattern= %-4r %-5p %d{yyyy-MM-dd HH: mm: ssS} %c %m%n 这里需要说明的就是日志信息格式中几个符号所代表的含义: 1)-X号: X信息输出时左对齐。 2)%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL。 3)%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如: %d{yyy MM dd HH: mm: ss,SSS},输出类似: 2002年10月18日 22: 10: 28,921。 4)%r: 输出自应用启动到输出该log信息耗费的毫秒数。 5)%c: 输出日志信息所属的类名,通常就是所在类的全名。 6)%t: 输出产生该日志事件的线程名。 7)%l: 输出日志事件的发生位置,相当于%C.%M(%F: %L)的组合,包括类目名、发生的线程,以及在代码中的行数。 举例: Testlog4.main(TestLog4.java: 10)。 8)%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 9)%%: 输出一个"%"字符。 10)%F: 输出日志消息产生时所在的文件名称。 11) %L: 输出代码中的行号。 12)%m: 输出代码中指定的消息,产生的日志具体信息。 13)%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行。 可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。 如: 1)%20c: 指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。 2)%-20c: 指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,"-"号指定左对齐。 3)%.30c: 指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。 4)%20.30c: 如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。 在java代码中使用 publicclassLogUtil { privatestaticfinalLoggerlogger; static { logger=Logger.getLogger("Eicms"); } publicstaticvoiddebug(Stringmsg,Throwableex) { logger.log(Level.DEBUG,msg,ex); } } ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1.Commons-Loggin简介 JakartaCommonsLogging(JCL)提供的是一个日志(Log)接口(interface),同时兼顾轻量级和不依赖于具体的日志实现工具。 它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。 用户被假定已熟悉某种日志实现工具的更高级别的细节。 JCL提供的接口,对其它一些日志工具,包括Log4J,AvalonLogKit,andJDK1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。 2.快速入门 JCL有两个基本的抽象类: Log(基本记录器)和LogFactory(负责创建Log实例)。 当commons-logging.jar被加入到CLASSPATH之后,它会合理地猜测你想用的日志工具,然后进行自我设置,用户根本不需要做任何设置。 默认的LogFactory是按照下列的步骤去发现并决定那个日志工具将被使用的(按照顺序,寻找过程会在找到第一个工具时中止): 1.寻找当前factory中名叫mons.logging.Log配置属性的值 2.寻找系统中属性中名叫mons.logging.Log的值 3.如果应用程序的classpath中有log4j,则使用相关的包装(wrapper)类(Log4JLogger) 4.如果应用程序运行在jdk1.4的系统中,使用相关的包装类(Jdk14Logger) 5.使用简易日志包装类(SimpleLog) mons.logging.Log的具体实现有如下: -mons.logging.impl.Jdk14Logger 使用JDK1.4。 -mons.logging.impl.Log4JLogger 使用Log4J。 -mons.logging.impl.LogKitLogger 使用avalon-Logkit。 -mons.logging.impl.SimpleLog common-logging自带日志实现类。 它实现了Log接口,把日志消息都输出到系统错误流System.err中。 -mons.logging.impl.NoOpLog common-logging自带日志实现类。 它实现了Log接口。 其输出日志的方法中不进行任何操作。 3.使用JCL开发 因为Log4j的强大,同时开发者又不希望对Log4j的依赖性太强。 所以目前比较流行的是Commons-logging和Log4j结合使用。 1.部署日志器 下载commons-logging.jar和log4j.jar包,能后把它们放到工程的lib目录下,引入工程中。 2.指定日志器 在属性文件common-logging.properties中设置实现接口的类。 如下(这里设置Log4j为所使用的日志包): #commons-logging.properties文件配置信息 #mons.logging.Log=mons.logging.impl.SimpleLog #Mustbeoneof("trace","debug","info","warn","error",or"fatal"). #利用log4j为输出介质 mons.logging.Log=mons.logging.impl.Log4JCategoryLog #JDK5Logger #mons.logging.Log=mons.logging.impl.Jdk14Logger 3.mons.logging.Log接口中定义的方法,按严重性由高到低的顺序有: log.fatal(Objectmessage); log.fatal(Objectmessage,Throwablet); log.error(Objectmessage); log.error(Objectmessage,Throwablet); log.warn(Objectmessage); log.warn(Objectmessage,Throwablet); log.info(Objectmessage); log.info(Objectmessage,Throwablet); log.debug(Objectmessage); log.debug(Objectmessage,Throwablet); log.trace(Objectmessage); log.trace(Objectmessage,Throwablet); 除此以外,还提供下列方法以便代码保护。 log.isFatalEnabled(); log.isErrorEnabled(); log.isWarnEnabled(); log.isInfoEnabled(); log.isDebugEnabled(); log.isTraceEnabled(); 4.信息级别 确保日志信息在内容上和反应问题的严重程度上的恰当,是非常重要的。 1)fatal非常严重的错误,导致系统中止。 期望这类信息能立即显示在状态控制台上。 2)error其它运行期错误或不是预期的条件。 期望这类信息能立即显示在状态控制台上。 3)warn使用了不赞成使用的API、非常拙劣使用API,'几乎就是'错误,其它运行时不合需要和不合预期的状态但还没必要称为"错误"。 期望这类信息能立即显示在状态控制台上。 4)info运行时产生的有意义的事件。 期望这类信息能立即显示在状态控制台上。 5)debug系统流程中的细节信息。 期望这类信息仅被写入log文件中。 6)trace更加细节的信息。 期望这类信息仅被写入log文件中。 通常情况下,记录器的级别不应低于info.也就是说,通常情况下debug的信息不应被写入log文件中。 4.ApacheCommons-logging使用流程 1)将common-logging.jar包加入到环境变量或者classpath。 2)导入mons.logging.Log;mons.logging.LogFactory;及相关包 3)在需要使用logging的地方获取Log实例。 privatestaticLoglog=LogFactory.getLog(Test.class); 4)使用Logger对象的debug,info,fatal...方法。 log.debug("Debuginfo."); 5.ApacheCommons-logging使用示例 Test.java packagesample; importmons.logging.Log; importmons.logging.LogFactory; publicclassTest{ privatestaticLoglog=LogFactory.getLog(Test.class); publicvoidlog(){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- log4j 配置 使用