apache log4j简单使用

一.装载log4j-1.2.8.jar到你的工程WEB-INF/lib目录下(下载地址)

二.设置资源文件:log4j.properties

     一般情况下该资源文件放在工程WEB-INF/classes(默认的)目录下,因为这样子系统可以自己找到该资源文件,不用我们人工指定。

     log4j.properties内容格式大体如下:    

     log4j.rootCategory=INFO, appender1 , appender2

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

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

     log4j.appender.appender1.ConversionPattern=[QC] %p [%t] %C.%M(%L) | %m%n

 

    log4j.appender.appender2=org.apache.log4j.DailyRollingFileAppender

    log4j.appender.appender2.File=D://Tomcat 5.5//logs//qc.log

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

   log4j.appender.appender2.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

  #以下是工程使用包时出现错误的日志等级的定义,可以不写

   log4j.logger.com.neusoft=DEBUG

   log4j.logger.com.opensymphony.oscache=ERROR

   log4j.logger.net.sf.navigator=ERROR

   log4j.logger.org.apache.commons=ERROR

说明:

  1.log4j.rootCategory=INFO, appender1,appender2

       将等级为INFO的日志信息输出到appender1和appender2这两个目的地,接下去就是定义这两个appender(appender可以任意起名).日志等级可分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERROR的log信息,而DEBUG信息不会被显示。

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

      将日志输出端appender1定义为一个控制台,表示日志将输出到控制台。例外还有以下几种输出方式:

    org.apache.log4j.FileAppender(文件),

    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) 

    appender2就是采用DailyRollingFileAppender,表示日志信息输出到日志文件(接下来指定日志路径)

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

   该属性是指定日志信息将采用什么布局显示。

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

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

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

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

4.log4j.appender.stdout.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

   该属性是指定每条日志信息将以什么固定格式输出。

   %m 输出代码中指定的消息

   %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

   %r 输出自应用启动到输出该log信息耗费的毫秒数

    %c 输出所属的类目,通常就是所在类的全名

    %t 输出产生该日志事件的线程名

    %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

    %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

    %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

     [message ]固定显示的信息

5.log4j.appender.appender2.File=D://Tomcat 5.5//logs//qc.log

    指定日志文件的路径,可以采用绝对路径和相对路径(具体实现下面再说)

三.log4j使用


private   static  Logger logger  =  Logger.getLogger(LogInit. class ); // LogInit.class所在类的类名

logger.info(
" 输出日志信息 " );

以上代码仅仅log4j.properties 资源文件在默认路径才不会出现错误。假如资源文件路径不是默认的,可以这么做:

 

String path  =   " C:/Program Files/Apache Software Foundation/Tomcat 6.0/webapps/structs/WEB-INF/classes/Log4j.properties " ; // 绝对路径
PropertyConfigurator.configure(path);

使用这种方式就可以指定任意的*.properties文件,不一定是log4j.properties,系统也可以识别了。不过路径确实很麻烦,要是应用服务器的根目录变了,还要重新写路径再编译文件,可以这么得到绝对路径:

 

String prefix  =   this .getServletContext().getRealPath( " / " );
// 得到根目录,好像要在Servlet才能有这种方法,所以你的类要是一个在web.xml定义的servlet

 

四.log4j日志文件动态指定 

上面是固定而且以绝对路径来指定日志文件的目录,下面介绍三种动态指定法(从网上总结的,在此感谢那些同仁)

第一种:使用系统属性,设置相对路径,方法如下

1.更改上面的资源文件:

log4j.appender.appender2.File=${variable}/mylog.log

2.在所在类,设置系统属性,并且重新加载资源文件

  System.setProperty("varible","日志所在目录");

  PropertyConfigurator.configure("资源文件绝对路径");//注意先后顺序。

第二种:不修改资源文件内容,在具体类中修改资源文件的属性值

 

Properties property  =   new  Properties();        
        
try   {
            FileInputStream fis 
= new FileInputStream(propertyPath);//资源文件绝对路径
            property.load(fis);            
            property.setProperty(
"log4j.appender.file.File""d:/test1.log");
            PropertyConfigurator.configure(property);            
            fis.close();
        }
  catch  (FileNotFoundException e)  {
            
// TODO Auto-generated catch block
            e.printStackTrace();
        }
catch (IOException e) {
            e.printStackTrace();
        }

以上两种都需要在所在类动手脚,其实就是通过类修改资源文件的属性来实现的,这样子还不如直接修改资源文件。接下来这种就是只需修改系统环境变量。

第三种:

首先修改资源文件:log4j.appender.appender2.File=${variable}/mylog.log,这里variable变成系统环境变量。

然后添加系统的一个名为variable环境变量,值为日志文件的目录名,比如日志放在d:/log/mylog.log,值就等于d:/log就行。

最后一点也是关键一步,修改log4j-1.2.8.jar里java文件并重新编译(需要你有src/java/org/apache/log4j/helpers/OptionConverter.java的源代码):

添加一个方法:

public   static  String getEnvProperty(String key, String def)  {
    
try {
        String value 
= System.getenv(key);
        
if (value == null)

        
{
            value 
= def;

        }

      
return value;
    }
 catch(Throwable e) // MS-Java throws com.ms.security.SecurityExceptionEx

      LogLog.debug(
"Was not allowed to read system property ""+key+"".");
      
return def;
    }

  }

修改部分代码:

// 本来的方法只能读取系统的属性值,修改的代码可以读取系统环境变量的值。
/*
     String replacement = getSystemProperty(key, null);

     // then try props parameter
     if(replacement == null && props != null) {
     replacement = props.getProperty(key);
     }
*/

// 修改为:
String replacement  =  getSystemProperty(key,  null );

     
//  then try in environment properties
      if  (replacement  ==   null )
     
{
         replacement 
= getEnvProperty(key, null);
     }


     
//  then try props parameter
      if (replacement  ==   null   &&  props  !=   null {
     replacement 
= props.getProperty(key);
     }

总的来说,第三种比较好些,只要设置系统环境变量。个人觉得如果你不要经常修改日志文件位置,你干脆直接在资源文件固定好。

 

 

 

 

  

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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-1.2.11.jar, log4j-1.2.12.jar, log4j-1.2.13-sources.jar, log4j-1.2.13.jar, log4j-1.2.13.src.jar, log4j-1.2.14-sources.jar, log4j-1.2.14.jar, log4j-1.2.15-sources.jar, log4j-1.2.15.jar, log4j-1.2.16-sources.jar, log4j-1.2.16.jar, log4j-1.2.5.jar, log4j-1.2.6.jar, log4j-1.2.7.jar, log4j-1.2.8.jar, log4j-1.2.9.jar, log4j-1.2.91.jar, log4j-1.2.jar, log4j-1.2rc1.jar, log4j-1.3alpha-7.jar, log4j-api-2.0.2-javadoc.jar, log4j-api-2.0.2-sources.jar, log4j-api-2.0.2.jar, log4j-boot.jar, log4j-bridge-0.9-sources.jar, log4j-bridge-0.9-tests.jar, log4j-bridge-0.9.4-sources.jar, log4j-bridge-0.9.4-tests.jar, log4j-bridge-0.9.4.jar, log4j-bridge-0.9.6-sources.jar, log4j-bridge-0.9.6-tests.jar, log4j-bridge-0.9.6.jar, log4j-bridge-0.9.jar, log4j-config.jar, log4j-core-2.0.2-javadoc.jar, log4j-core-2.0.2-sources.jar, log4j-core-2.0.2-tests.jar, log4j-core-2.0.2.jar, log4j-core.jar, log4j-ext.jar, log4j-flume-ng-2.0.2-javadoc.jar, log4j-flume-ng-2.0.2-sources.jar, log4j-flume-ng-2.0.2.jar, log4j-java1.1.jar, log4j-jcl-2.0.2-javadoc.jar, log4j-jcl-2.0.2-sources.jar, log4j-jcl-2.0.2.jar, log4j-jmx-gui-2.0.2-javadoc.jar, log4j-jmx-gui-2.0.2-sources.jar, log4j-jmx-gui-2.0.2.jar, log4j-nosql-2.0.2-javadoc.jar, log4j-nosql-2.0.2-sources.jar, log4j-nosql-2.0.2.jar, log4j-over-slf4j-1.5.0.jar, log4j-over-slf4j-1.5.10.jar, log4j-over-slf4j-1.5.3.jar, log4j-over-slf4j-1.5.5.jar, log4j-over-slf4j-1.5.6-sources.jar, log4j-over-slf4j-1.5.6.jar, log4j-over-slf4j-1.5.8-sources.jar, log4j-over-slf4j-1.5.8.jar, log4j-over-slf4j-1.6.1.jar, log4j-slf4j-impl-2.0.2-javadoc.jar, log4j-slf4j-impl-2.0.2-sources.jar, log4j-slf4j-impl-2.0.2.jar, log4j-snmp-appender.jar, log4j-taglib-2.0.2-javadoc.jar, log4j-taglib-2.0.2-sources.jar, log4j-taglib-2.0.2.jar, log4j-to-slf4j-2.0.2-javadoc.jar, log4j-to-slf4j-2.0.2-sources.jar, log4j-to-slf4j-2.0.2.jar, log4j-web-2.0.2-javadoc.jar, log4j-web-2.0.2-sources.jar, log4j-web-2.0.2.jar, log4j-wjw.jar, log4j-xml-1.3alpha-7.jar, log4j.jar, org.apache.log4j_1.2.15.v201005080500.jar, org.apache.log4j_1.2.15.v201012070815.jar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值