zoukankan      html  css  js  c++  java
  • Log4J日志配置详解2

     

    log4j怎样控制只输出自己写的代码的日志,不输出框架中的日志

    我刚才在log4j配置文件中加了一个段配置如下(myLog下面的一部分):

    log4j.rootLogger=warn,CONSOLE
    
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Target=System.out
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
    
    
    log4j.logger.myLog=info,myLog
    
    log4j.appender.myLog=org.apache.log4j.ConsoleAppender
    log4j.appender.myLog.Target=System.out
    log4j.appender.myLog.layout=org.apache.log4j.PatternLayout
    log4j.appender.myLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n

    然后在LoginAction类中写下面的代码:

    private static  Logger log = Logger.getLogger("myLog");
    
    log.info("你好啊。");

    结果后台输出的日志是这样的:

    2012-12-05 17:11:58  INFO myLog:68 - 你好啊。
    2012-12-05 17:11:58  INFO myLog:68 - 你好啊。

    为什么会输出两次?并且%c不是表示输出所在的类名,类名应该是LoginAction啊,怎么成了myLog?

    还有能不能指定输出某些包中的类的日志?因为这此包中的类可能业务上有联系,需要要跟踪一下处理过程。

    private static  Logger log = Logger.getLogger(LoginAction.class);

    可以指定输出那些包中的内容的,具体的你可以去网上查下

    --- 共有 1 条评论 ---

    1、输出两次是因为你的mylog配置有误:log4j.appender.myLog.Target=System.out,你应该是要改成一个输出到一个文件吧,控制台已经有输出了。

    2、类名问题: private static  Logger log = Logger.getLogger("myLog"); 这种写法也可以,你在输出项配置中直接写一个%c或%l试试,应该没有用Ant运行吧,如果是Ant编译的话有一个DEBUG的选项要启用才行。

    3、输出指定包的方法直接log4j.logger.包名。你可以通过log4j.rootLogger=OFF来屏蔽其他输出。以下配置屏蔽SSH框架的日志输出:

    • log4j.logger.org.springframework=OFF  
    • log4j.logger.org.apache.struts2=OFF  
    • log4j.logger.com.opensymphony.xwork2=OFF  
    • log4j.logger.com.ibatis=OFF  
    • log4j.logger.org.hibernate=OFF 


     

    一般情况下只需要定义一个到控制台的输出即可,还会顶一个到文件的输出,如下

    ### 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=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

    log4j.rootLogger=warn, stdout的意思是如果没有其他的话系统中所有日志级别都是warn,可以指定给哪些包来指定何种级别,这样就会覆盖rootLogger的级别比如:

    log4j.logger.org.hibernate=debug
    
    log4j.logger.org.hibernate.SQL=debug
    为什么会输出2次,那是因为你定义了2个到控制台的输出 --- 共有 1 条评论 ---
    0

    刚才改成这样,输出两次的问题解决了。为2012-12-05 17:55:01  INFO myLog:68 - 你好啊。但是类名还是不是LoginAction

    log4j.rootLogger=warn,CONSOLE
    
    log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Target=System.out
    log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
    
    
    log4j.logger.myLog=info
    
    log4j.appender.myLog=org.apache.log4j.ConsoleAppender
    log4j.appender.myLog.layout=org.apache.log4j.PatternLayout
    log4j.appender.myLog.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p %c{1}:%L - %m%n
    --- 共有 2 条评论 ---
     
  • 相关阅读:
    我看Slashdot
    三维地形建模工具(MultiGenParadigm公司)
    街头新景:数字公交站
    美国一公司开发出WiFi定位系统 比GPS更精确
    理想、激情、生存—— 一位技术管理人员的20年工作经历和感悟 (ZT)
    西安国际化 市场化 人文化 生态化发展报告
    Google Earth Plus
    Visual Studio 2003 “默认设置”快捷键
    Google免费开放地图大餐
    向Windows 2000道声珍重
  • 原文地址:https://www.cnblogs.com/xiaolei2017/p/9243673.html
Copyright © 2011-2022 走看看