Log4j框架---记录系统、程序的日志文件

log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:http://logging.apache.org/log4j/1.2/download.html我们先看一个最简单的示例:

【示例1】项目结构:


【注:由于这里的多个项目公用一个jar档,我们可以创建一个专门放置jar档的Java工程,然后将jar档放到lib目录下。在要使用的工程中按图所示进行引用 】

package com.coderdream.log4j;   
 
import org.apache.log4j.Logger;   
   /**  
    * author by  http://www.bt285.cn 
    * http://www.5a520.cn     
*/  
public class HelloLog4j {   
 
    private static Logger logger = Logger.getLogger(HelloLog4j.class);   
 
  
    public static void main(String[] args) {   
        // System.out.println("This is println message.");   
          
        // 记录debug级别的信息   
        logger.debug("This is debug message.");   
        // 记录info级别的信息   
        logger.info("This is info message.");   
        // 记录error级别的信息   
        logger.error("This is error message.");   
    }   
}  

配置文件log4j.properties:

Properties代码 

#可以设置级别:debug>info>error   

#debug:显示debug、info、error   

#info:显示info、error   

#error:只error   

log4j.rootLogger=debug,appender1   

#log4j.rootLogger=info,appender1   

#log4j.rootLogger=error,appender1   

  

#输出到控制台   

10 log4j.appender.appender1=org.apache.log4j.ConsoleAppender   

11 #样式为TTCCLayout   

12 log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout  

输出结果:

Console代码 

13 [main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.   

14 [main] INFO com.coderdream.log4j.HelloLog4j - This is info message.   

15 [main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.  

  通过配置文件可知,我们需要配置3个方面的内容:

1、根目录(级别和目的地);

2、目的地(控制台、文件等等);

3、输出样式。
下面我们来看看Log4J的类图:

Logger - 日志写出器,供程序员输出日志信息
Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去
ConsoleAppender - 目的地为控制台的Appender
FileAppender - 目的地为文件的Appender
RollingFileAppender - 目的地为大小受限的文件的Appender
Layout - 日志格式化器,用来把程序员的logging request格式化成字符串
PatternLayout - 用指定的pattern格式化logging request的Layout
Log4j基本使用方法
  Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显 示内容。
一、定义配置文件
  其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:
1.配置根Logger,其语法为:
   log4j.rootLogger = [ level ] , appenderName, appenderName, …
  其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优 先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定 义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。

2.配置日志信息输出目的地Appender,其语法为:
   log4j.appender.appenderName = fully.qualified.name.of.appender.class
  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(将日志信息以流格式发送到任意指定的地方)

3.配置日志信息的格式(布局),其语法为:
   log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
  log4j.appender.appenderName.layout.option1 = value1
  …
  log4j.appender.appenderName.layout.option = valueN

  其中,Log4j提供的layout有以e几种:
  org.apache.log4j.HTMLLayout(以HTML表格形式布局),
  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

  Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息
  %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
  %r 输出自应用启动到输出该log信息耗费的毫秒数
  %c 输出所属的类目,通常就是所在类的全名
  %t 输出产生该日志事件的线程名
  %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921
  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
二、在代码中使用Log4j
1.得到记录器
   使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:
  public static Logger getLogger( String name)
  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )

2.读取配置文件
   当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
  BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
  PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
  DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。

3.插入记录信息(格式化日志信息)
   当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
  Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

示例2~示例8

【示例2】 输出为文本文件或HTML文件

Porperties代码 

16 #设置级别:   

17 log4j.rootLogger=debug,appender1   

18   

19 #输出到文件(这里默认为追加方式)   

20 log4j.appender.appender1=org.apache.log4j.FileAppender   

21 #设置文件输出路径   

22 #【1】文本文件   

23 #log4j.appender.appender1.File=c:/Log4JDemo02.log   

24 #【2】HTML文件   

25 log4j.appender.appender1.File=c:/Log4JDemo02.html   

26 #设置文件输出样式   

27 #log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout   

28 log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout  

 示例3】 输出为文本文件或HTML文件

Properties代码 

29 #设置级别和多个目的地   

30 log4j.rootLogger=debug,appender1,appender2   

31   

32 #输出到控制台   

33 log4j.appender.appender1=org.apache.log4j.ConsoleAppender   

34 #设置输出样式   

35 log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout   

36   

37 #输出到文件(这里默认为追加方式)   

38 log4j.appender.appender2=org.apache.log4j.FileAppender   

39 #设置文件输出路径   

40 #【1】文本文件   

41 #log4j.appender.appender2.File=c:/Log4JDemo02.log   

42 #【2】HTML文件   

43 log4j.appender.appender2.File=c:/Log4JDemo02.html   

44 #设置文件输出样式   

45 #log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout   

46 log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout  

【示例4】 SimpleLayout样式

Properties代码 

47 #设置级别和目的地   

48 log4j.rootLogger=debug,appender1   

49   

50 #输出到控制台   

51 log4j.appender.appender1=org.apache.log4j.ConsoleAppender   

52 #设置输出样式   

53 log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout  

 输出结果:

控制台代码 

54 DEBUG - This is debug message.   

55 INFO - This is info message.   

56 ERROR - This is error message.  

【示例5】 自定义样式

Java代码 

57 #设置级别和目的地   

58 log4j.rootLogger=debug,appender1   

59   

60 #输出到控制台   

61 log4j.appender.appender1=org.apache.log4j.ConsoleAppender   

62 #设置输出样式   

63 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout   

64 #自定义样式   

65 # %r 时间 0  

66 # %t 方法名 main   

67 # %p 优先级 DEBUG/INFO/ERROR   

68 # %c 所属类的全名(包括包名)   

69 # %l 发生的位置,在某个类的某行   

70 # %m 输出代码中指定的讯息,如log(message)中的message   

71 # %n 输出一个换行   

72   

73 log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n  

输出结果:

控制台代码 

74 0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j    

75 -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16) -This is debug message.   

76 31 [main] [INFO] - com.coderdream.log4j.HelloLog4j    

77 -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18) -This is info message.   

78 31 [main] [ERROR] - com.coderdream.log4j.HelloLog4j    

79 -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20) -This is error message.  

【示例6】 多目的地、自定义样式

Properties代码 

80 #设置级别和目的地   

81 log4j.rootLogger=debug,appender1,appender2   

82   

83 #输出到控制台   

84 log4j.appender.appender1=org.apache.log4j.ConsoleAppender   

85 #设置输出样式   

86 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout   

87 #自定义样式   

88 # %r 时间 0  

89 # %t 方法名 main   

90 # %p 优先级 DEBUG/INFO/ERROR   

91 # %c 所属类的全名(包括包名)   

92 # %l 发生的位置,在某个类的某行   

93 # %m 输出代码中指定的讯息,如log(message)中的message   

94 # %n 输出一个换行符号   

95 log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n   

96   

97 #输出到文件(这里默认为追加方式)   

98 log4j.appender.appender2=org.apache.log4j.FileAppender   

99 #设置文件输出路径   

100 #【1】文本文件   

101 log4j.appender.appender2.File=c:/Log4JDemo06.log   

102 #设置文件输出样式   

103 log4j.appender.appender2.layout=org.apache.log4j.PatternLayout   

104 log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n  

【示例7】 【企业应用】设置 特定包的级别和目的地

先增加一个包,新建一个类:

Java代码 

105 package com.coderdream.log4jDao;   

106   

107 import org.apache.log4j.Logger;   

108   

109 public class HelloDao {   

110     private static Logger logger = Logger.getLogger(HelloDao.class);   

111   

112     /** 

113      * @param args 

114      */  

115     public static void main(String[] args) {   

116         // 记录debug级别的信息  

117         logger.debug("This is debug message from Dao.");   

118         // 记录info级别的信息  

119         logger.info("This is info message from Dao.");   

120         // 记录error级别的信息  

121         logger.error("This is error message from Dao.");   

122     }   

123 }  

      如果这个类作为基类,如J2EE中的BaseDao、BaseAction、BaseService等等,则我们可以将各层的日志信息分类输出到各个文件。

Properties代码 

124 #省略根,只设置特定包的级别和目的地   

125 log4j.logger.com.coderdream.log4j=debug,appender1   

126 log4j.logger.com.coderdream.log4jDao=info,appender1,appender2   

127   

128 #输出到控制台   

129 log4j.appender.appender1=org.apache.log4j.ConsoleAppender   

130 #设置输出样式   

131 log4j.appender.appender1.layout=org.apache.log4j.PatternLayout   

132 #自定义样式   

133 # %r 时间 0  

134 # %t 方法名 main   

135 # %p 优先级 DEBUG/INFO/ERROR   

136 # %c 所属类的全名(包括包名)   

137 # %l 发生的位置,在某个类的某行   

138 # %m 输出代码中指定的讯息,如log(message)中的message   

139 # %n 输出一个换行符号   

140 log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n   

141   

142 #输出到文件(这里默认为追加方式)   

143 log4j.appender.appender2=org.apache.log4j.FileAppender   

144 #设置文件输出路径   

145 #【1】文本文件   

146 log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log   

147 #设置文件输出样式   

148 log4j.appender.appender2.layout=org.apache.log4j.PatternLayout   

149 log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n  

【示例8】 log4j.xml的配置方式

Xml代码 

150 <?xml version="1.0" encoding="UTF-8"?>  

151 <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">  

152   

153 <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">  

154   

155     <appender name="appender1"  

156         class="org.apache.log4j.RollingFileAppender">  

157         <param name="File" value="logfile08.html" />  

158         <param name="MaxFileSize" value="1MB" />  

159         <param name="MaxBackupIndex" value="5" />  

160         <layout class="org.apache.log4j.HTMLLayout">  

161         </layout>  

162     </appender>  

163   

164     <root>  

165         <level value="debug" />  

166         <appender-ref ref="appender1" />  

167     </root>  

168 </log4j:configuration>  

为了提高效率,我们可以在写日志前增加判断:

Java代码 

169 // 记录debug级别的信息  

170 if (logger.isDebugEnabled()) {   

171     logger.debug("This is debug message from Dao.");   

172 }   

173   

174 // 记录info级别的信息  

175 if (logger.isInfoEnabled()) {   

176     logger.info("This is info message from Dao.");   

177 }   

178   

179 // 记录error级别的信息  

180 logger.error("This is error message from Dao."); 

posted on 2009-05-08 23:39 彭伟 阅读(1032) 评论(0)  编辑  收藏 所属分类: 框架技术分区


只有注册用户登录后才能发表评论。


网站导航:
 
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

导航

统计

常用链接

留言簿(3)

随笔分类

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜