在使用log4j的时候,项目中有spring和hibernate ,这两个框架本身也用到了log4j,当把等级调成debug的时候,spring hiberante中的调试信息也出来了,能不能把我自己的log和这些框架的log分开呢? 

解决方案 »

  1.   

    比较难分.因为LOG4J都是用RootLogger写日志,这是个静态的,只有一个,谁打日志都用它.
    你可以设置把Hibernate的showSQL关掉.
      

  2.   

    #log4j.rootCategory=info, stdout 
    #
    # Log4J Settings for log4j 1.2.x (via jakarta-commons-logging)
    #
    # The five logging levels used by Log are (in order):
    #
    #   1. DEBUG (the least serious)
    #   2. INFO
    #   3. WARN
    #   4. ERROR
    #   5. FATAL (the most serious)
    # Set root logger level to WARN and append to stdout
    log4j.rootLogger=WARN, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout# Pattern to output the caller's file name and line number.
    log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n
    # Print only messages of level ERROR or above in the package noModule.
    log4j.logger.noModule=FATAL
    # OpenSymphony Stuff
    log4j.logger.com.opensymphony=INFO
    log4j.logger.org.apache.struts2=DEBUG# Spring Stuff
    log4j.logger.org.springframework=INFO
    #log4j.logger.org.hibernate=info
    #log4j.logger.org.hibernate=debug
      

  3.   

    在我的项目中我的程序都放在com.thd这个包下,能不能对这个进行设置,我是这么写的log4j.rootLogger=debug,appender1
    log4j.appender.appender1=org.apache.log4j.ConsoleAppender   
    log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
    #log4j.appender.appender2.layout=org.apache.log4j.PatternLayout   
    log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n log4j.com.thd=debug,appender2
    log4j.appender.appender2=org.apache.log4j.ConsoleAppender
    log4j.appender.appender2.layout=org.apache.log4j.PatternLayout   
    log4j.appender.appender2.layout.ConversionPattern=[%C-%M] [%d{yy/MM/dd HH:mm:ss:SSS}] %m%n  
    java程序:package com.thd.test;
    import org.apache.log4j.Logger;
    public class T01 {
    public static Logger  log = Logger.getLogger(T01.class);
    public static void main(String[] args) {
    log.debug("1");
    System.out.println("success");
    }
    }
    但是log4j输出的内容是log4j.rootLogger定义的格式 而不是log4j.com.thd定义的内容  怎么回事呢?
      

  4.   

    很简单呢,这样就可以了<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
      threshold="debug">  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t] [%c{1}] %m%n" />
        </layout>
      </appender>  <appender name="ASYNC_CONSOLE" class="org.apache.log4j.AsyncAppender">
        <param name="BufferSize" value="8192"/>
        <appender-ref ref="CONSOLE" />
      </appender>  <appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="~/x/log/server.log" />
        <param name="Append" value="true" />
        <param name="DatePattern" value="'.'yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
          <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%t] [%c{1}] %m%n" />
        </layout>
      </appender>
      
      <!-- 定义你自己包的日志级别 -->
      <logger name="com.xxxx">
        <level value="DEBUG" />
      </logger>  <root>
        <!- 通用的日志级别 -->
        <level value="INFO" />
        <appender-ref ref="CONSOLE" />
      </root>
    </log4j:configuration>
      

  5.   

    log4j.com.thd=debug,appender2
    改为
    log4j.logger.com.thd=debug