`
whp0731
  • 浏览: 170362 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

log4j

    博客分类:
  • J2SE
阅读更多

文章一

Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。

 

日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。

写配置文件

#配置文件settingfilename.ini

log4j.rootLogger=INFO, A1, A2

#setting for appender A1

log4j.appender.A1=org.apache.log4j.ConsoleAppender

log4j.appender.A1.layout=org.apache.log4j.PatternLayout

log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

#setting for appender A2

log4j.appender. A2=org.apache.log4j.RollingFileAppender

log4j.appender. A2.File=example.log

log4j.appender. A2.MaxFileSize=100KB

log4j.appender. A2.MaxBackupIndex=1

log4j.appender. A2.layout=org.apache.log4j.PatternLayout

log4j.appender. A2.layout.ConversionPattern=%p %t %c - %m%n

 

注意:其中的log4j.appender必须都为小写

注释:

1.配置根Logger,其语法为:

log4j.rootLogger = [ level ] , appenderName, appenderName, …

其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。指定输出只显示比该级别以上的信息,所有比该级别低的信息都不会被显示。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName就是指定日志信息输出到哪个地方。您可以同时指定多个输出目的地。

 

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有以下几种:

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

 

4.当layout为PatternLayout时,ConversionPattern的格式有下面选项:

%r: 自程序开始后消耗的毫秒数

%t: 表示日志记录请求生成的线程

%p: 表示日志语句的优先级

%r: 与日志请求相关的类别名称

%c: 信息所在的类名

%m%n: 表示消息的内容

 

5.配置文件同样适用于服务器端和客户端。

 

代码中的使用

1. import中加入以下几行:

import org.apache.log4j.PropertyConfigurator ;

import org.apache.log4j.Logger ;

import org.apache.log4j.Level ;

2. 定义Logger变量

static Logger logger = Logger.getLogger(ServerWithLog4j.class.getName ()) ;

3. 读配置文件

PropertyConfigurator.configure (String settingfilename) ;

4. 显示日志信息

按显示级别显示日志信息

logger.debug(String log_info);

用于显示调试信息

logger.info (String log_info);

用于显示系统提示信息

logger.warn(String log_info);

用于显示警告或特殊提示

logger.error(String log_info);

用于显示错误信息,一般在异常中使用。例如:

catch(IOException e) {

logger.error("IOException!");

System.exit(0);

}

 

以上只是很简单的log4j包的一般使用,如果在使用中遇到问题,请查看包的API得到更详细的信息!

 

 

 

文章二

Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。

1. 配置文件
Log4J配置文件的基本格式如下:

#配置根Logger

Java代码 复制代码
  1. log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …  
log4j.rootLogger  =   [ level ]   ,  appenderName1 ,  appenderName2 ,  …



#配置日志信息输出目的地Appender

Java代码 复制代码
  1. log4j.appender.appenderName  =  fully.qualified.name.of.appender.class    
  2.   log4j.appender.appenderName.option1  =  value1    
  3.   …    
  4.   log4j.appender.appenderName.optionN  =  valueN   
log4j.appender.appenderName  =  fully.qualified.name.of.appender.class 
  log4j.appender.appenderName.option1  =  value1 
  … 
  log4j.appender.appenderName.optionN  =  valueN 


#配置日志信息的格式(布局)

Java代码 复制代码
  1. log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class    
  2.   log4j.appender.appenderName.layout.option1  =  value1    
  3.   …    
  4.   log4j.appender.appenderName.layout.optionN  =  valueN   
log4j.appender.appenderName.layout  =  fully.qualified.name.of.layout.class 
  log4j.appender.appenderName.layout.option1  =  value1 
  … 
  log4j.appender.appenderName.layout.optionN  =  valueN 


其中 [level] 是日志输出级别,共有5级:

Java代码 复制代码
  1. FATAL       0     
  2. ERROR      3     
  3. WARN       4     
  4. INFO         6     
  5. DEBUG      7   
FATAL       0  
ERROR      3  
WARN       4  
INFO         6  
DEBUG      7 



Appender 为日志输出目的地,Log4j提供的appender有以下几种:

Java代码 复制代码
  1. org.apache.log4j.ConsoleAppender(控制台),   
  2. org.apache.log4j.FileAppender(文件),   
  3. org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),   
  4. org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),   
  5. org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)    
  6. Layout:日志输出格式,Log4j提供的layout有以下几种:   
  7. org.apache.log4j.HTMLLayout(以HTML表格形式布局),   
  8. org.apache.log4j.PatternLayout(可以灵活地指定布局模式),   
  9. org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),   
  10. org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)    
  11. 打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:   
  12.     %m   输出代码中指定的消息   
  13.   %p   输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL    
  14.   %r   输出自应用启动到输出该log信息耗费的毫秒数    
  15.   %c   输出所属的类目,通常就是所在类的全名    
  16.   %t   输出产生该日志事件的线程名    
  17.   %n   输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”    
  18.   %d   输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:20021018日  22 : 10 : 28 , 921     
  19.   %l   输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举  
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 
Layout:日志输出格式,Log4j提供的layout有以下几种:
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平台为“\r\n”,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 ) 
2. 在代码中初始化Logger:
1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。

3. 为不同的 Appender 设置日志输出级别:
当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。
这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改Appender的Threshold 就能实现,比如下面的例子:

[配置文件]
### set log levels ###

Java代码 复制代码
  1. log4j.rootLogger = debug ,  stdout ,  D ,  E  
log4j.rootLogger = debug ,  stdout ,  D ,  E



### 输出到控制台 ###

Java代码 复制代码
  1. log4j.appender.stdout = org.apache.log4j.ConsoleAppender   
  2. log4j.appender.stdout.Target = System.out   
  3. log4j.appender.stdout.layout = org.apache.log4j.PatternLayout   
  4. log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n  
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern =  %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n



### 输出到日志文件 ###

Java代码 复制代码
  1. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender   
  2. log4j.appender.D.File = logs/log.log   
  3. log4j.appender.D.Append = true  
  4. log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志   
  5. log4j.appender.D.layout = org.apache.log4j.PatternLayout   
  6. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n  
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n



### 保存异常信息到单独文件 ###

Java代码 复制代码
  1. log4j.appender.D = org.apache.log4j.DailyRollingFileAppender   
  2. log4j.appender.D.File = logs/error.log ## 异常日志文件名   
  3. log4j.appender.D.Append = true  
  4. log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!   
  5. log4j.appender.D.layout = org.apache.log4j.PatternLayout   
  6. log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n   
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n 


[代码中使用]

Java代码 复制代码
  1. public   class  TestLog4j   {   
  2.    public   static   void  main(String[] args)   {   
  3.       PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );   
  4.       Logger logger  =  Logger.getLogger(TestLog4j. class );   
  5.       logger.debug( " debug " );   
  6.       logger.error( " error " );   
  7.   }    
  public   class  TestLog4j   {
     public   static   void  main(String[] args)   {
        PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
        Logger logger  =  Logger.getLogger(TestLog4j. class );
        logger.debug( " debug " );
        logger.error( " error " );
    } 
} 


运行一下,看看异常信息是不是保存在了一个单独的文件error.log中

文章三、log4j的使用步骤

 

第一步:加入log4j-1.2.8.jar到lib下。

第二步:在CLASSPATH下建立log4j.properties。内容如下:

第三步:相应的修改其中属性,修改之前就必须知道这些都是干什么的,在文章一已讲解。

第四步:在要输出日志的类中加入相关语句:

定义属性:protected final Log log = LogFactory.getLog(getClass());

在相应的方法中:

if (log.isDebugEnabled())

{

log.debug(“System …..”);
}

 

分享到:
评论

相关推荐

    logging-log4j2-log4j-2.15.0-rc2.zip maven 资源库

    针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...

    log4j.jar各个版本

    apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...

    log4j-core-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-2.15.0....

    log4j-api-2.15.0.jar log4j-2.15.0-rc2

    Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-...

    apache-log4j-2.17.0 核心jar包

    Log4j 是一个日志记录框架,Log4j 2 是对 Log4j 的升级,提供了重大改进,超越其前身 Log4j 1.x,并提供许多其它现代功能 ,例如对标记的支持、使用查找的属性替换、lambda 表达式与日志记录时无垃圾等。 Apache ...

    Log4j日志包

    log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...

    log4j-slf4j-impl-2.12.1-API文档-中英对照版.zip

    赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...

    log4j-to-slf4j-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.12.1.jar; 赠送原API文档:log4j-to-slf4j-2.12.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.12.1.pom; 包含翻译后...

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    若依框架使用的log4j2.16.0,修复log4j漏洞log4j2下载最新log4j2.16.0下载

    log4j-api-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-api-2.12.1.jar; 赠送原API文档:log4j-api-2.12.1-javadoc.jar; 赠送源代码:log4j-api-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-api-2.12.1.pom; 包含翻译后的API文档:log4j-api-...

    log4j-slf4j-impl-2.17.1-API文档-中英对照版.zip

    赠送jar包:log4j-slf4j-impl-2.17.1.jar; 赠送原API文档:log4j-slf4j-impl-2.17.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.17.1.pom; ...

    log4j-to-slf4j-2.17.1-API文档-中英对照版.zip

    赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...

    log4j-to-slf4j-2.10.0-API文档-中文版.zip

    赠送jar包:log4j-to-slf4j-2.10.0.jar; 赠送原API文档:log4j-to-slf4j-2.10.0-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.10.0-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.10.0.pom; 包含翻译后...

    log4j-slf4j-impl-2.12.1-API文档-中文版.zip

    赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...

    log4j-over-slf4j-1.7.33-API文档-中英对照版.zip

    赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...

    log4j-over-slf4j-1.7.33-API文档-中文版.zip

    赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...

    log4j-api-2.17.1-API文档-中文版.zip

    赠送jar包:log4j-api-2.17.1.jar; 赠送原API文档:log4j-api-2.17.1-javadoc.jar; 赠送源代码:log4j-api-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-api-2.17.1.pom; 包含翻译后的API文档:log4j-api-...

    log4j日志驱动包

    Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....

    log4j中配置日志文件相对路径方法分析

    log4j中配置日志文件相对路径方法分析 方法一、 解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${...

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码,

Global site tag (gtag.js) - Google Analytics