Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 257|回复: 0

[struts学习]struts中的日志

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-11 02:01:31 | 显示全部楼层 |阅读模式
    所谓的Commons Logging接口,是指将日志功能的使用与日志具体实现分开,通过配置文件来指定具体使用的日志实现。这样你就可以在Struts 1.1中通过统一的接口来使用日志功能,而不去管具体是利用的哪种日志实现,有点于类似JDBC的功能。Struts 1.1中支持的日志实现包括:Log4J,JDK Logging API, LogKit,NoOpLog和SimpleLog。

    你可以按照如下的方式来使用Commons Logging接口(可以参照Struts源文中的许多类实现):

      

      
      package com.foo;

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
      public class Foo {     
        private static Log log = LogFactory.getLog(Foo.class);
        public void setBar(Bar bar) {        
        if (log.isTraceEnabled()) {         
            log.trace("Setting bar to " + bar);   
        }      
        this.bar = bar;   
      }
    }

       
      
      
       
       
       

       
      
      
    而开启日志功能最简单的办法就是在WEB-INF/classes目录下添加以下两个文件:

    commons-logging.properties文件:

    # commons-logging.properties
    org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

    simplelog.properties文件:

    # Logging detail level,
    # Must be one of ("trace", "debug", "info", "warn", "error", or "fatal").
    org.apache.commons.logging.simplelog.defaultlog=fatal

        这里我们采用的日志实现是SimpleLog,你可以在simplelog.properties文件指定日志明细的级别:trace,debug,info,warn,error和fatal,从trace到fatal错误级别越来越高,同时输出的日志信息也越来越少。而这些级别是和org.apache.commons.logging.log接口中的方法一一对应的。这些级别是向后包含的,也就是前面的级别包含后面级别的信息。

        Struts本身并没有配置日志功能,日志功能由commons-logging实现。在Struts中对日志功能的使用遵循以下的步骤:  
    1、如果存在log4j,就使用log4j(默认)。  
        在WEB-INF/classes目录下添加log4j.properties,即可启用log4j。下面是一个与hibernate搭配的log4j.properties文件:

    ### direct log messages to stdout ###
    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

    ### direct messages to file hibernate.log ###
    log4j.appender.file=org.apache.log4j.FileAppender
    log4j.appender.file.File=d:\hhhibernate.log
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

    ### set log levels - for more verbose logging change "info" to "debug" ###

    log4j.rootLogger=warn, stdout,file

    log4j.logger.net.sf.hibernate=info

    ### log just the SQL
    #log4j.logger.net.sf.hibernate.SQL=debug

    ### log JDBC bind parameters ###
    log4j.logger.net.sf.hibernate.type=info

    ### log schema export/update ###
    log4j.logger.net.sf.hibernate.tool.hbm2ddl=debug

    ### log cache activity ###
    #log4j.logger.net.sf.hibernate.cache=debug

    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.net.sf.hibernate.connection.DriverManagerConnectionProvider=trace

    2、如果存在JDK1.4, 使用JDK1.4。  
    3、如果两者都不存在,就使用SimpleLog。  

         Commons Logging接口实现了日志功能的使用与日志具体实现的分离。这样你在Struts 1.1中就可以通过统一的接口来使用日志功能,而不必关心日志功能是由哪种方案来实现。如果你需要Struts当前支持的日志实现方案,你可以参考 org.apache.commons.logging的文档。如果你要在Struts中使用commons-logging功能,你就需要把所需的JAR文件加到到你的应用程序库中。也许有时候你会问“我真的需要使用commons-logging吗”。问题答案取决于实际项目的要求。如果你希望你的日志方案能够轻易的改变日志实现方案而同时又对你的应用程序没有什么影响,那么commons-logging会是一个非常好的选择。  

    那么,我们如何在我的编码过程中学习使用commons-logging呢?  

    在你的代码中使用commons-logging是件简单的事,你所做的就是加入两个import,同时声明一个logger。  

    package com.foo;
    // ...
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    ...
    public class Foo {
         // ...
         private static Log log = LogFactory.getLog(Foo.class);\
         // ...
         public void setBar(Bar bar) {
             if (log.isTraceEnabled()) {
                 log.trace("Setting bar to " + bar);
             }
             this.bar = bar;\
         }
    // ...
    }
         通常,我们会为每个类都生成唯一的一个logger。为了方便起见在我们给这个logger命名的时候希望这个对象的名称能够体现出这个logger是在哪个地方使用的。在这个例子中logger的名字是com.foo.Foo。这样你通过logger的名字就可以很快地指向问题出现的地方。此外,你也可以方便地启动/关闭日志功能。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-17 11:21 , Processed in 0.367116 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表