public class Log4j {
private final static String CLASS_NAME = Log4j.class.getName();
public static Logger log = Logger.getLogger(CLASS_NAME);
        //BasicConfigurator.configure(new ConsoleAppender(new PatternLayout(
// "%-r\t%-d{yyyy-MM-dd HH:mm:ss}\t%p\t%-t\t%l\t%m%n")));        PropertyConfigurator.configure("./conf/log4j.properties");        public static void main(String[] args) {
                log.debug("ALL信息:信息级别:" + Level.ALL_INT);
log.debug("DEBUG信息:信息级别:" + Level.DEBUG_INT);
log.info("INFO信息:信息级别:" + Level.INFO_INT);
log.warn("WARN信息:信息级别:" + Level.WARN_INT);
log.error("ERROR信息:信息级别:" + Level.ERROR_INT);
log.fatal("FATAL信息:信息级别:" + Level.FATAL_INT);
log.fatal("OFF信息:信息级别:" + Level.OFF_INT);

}
}
java 代码如上:
./conf/log4j.properties如下:log4j.rootCategory = myConsole,A1
#console appender
log4j.appender.myConsole=org.apache.log4j.ConsoleAppender
log4j.appender.myConsole.layout=org.apache.log4j.PatternLayout
log4j.appender.myConsole.layout.ConversionPattern=%-r\t%-d{yyyy-MM-dd HH:mm:ss}\t%-t\t%p\t%l\t%x\t%m%n
#log4j.appender.myConsole.threshold=INFOlog4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p [%t] %37c %3x - %m%n问题:如果不用PropertyConfigurator.configure("./conf/log4j.properties"); 可以输出日志;
    现在我打算用配置文件控制日志输出,配置文件路径也没错,日志输出如下:\
ERROR [main]             Log4j     - 日志信息
显然配置文件没有起作用,请问各位大哥,问题在哪里,怎么解决
     

解决方案 »

  1.   

    我这里有一个log4j的配置,日志文件是html的,lz参考下#All level less than INFO will be logged
    log4j.rootLogger=warn, A1#A1 is the output device
    log4j.appender.A1=org.apache.log4j.RollingFileAppender
    log4j.appender.A1.File=c:/godomro/log4j.htm
    log4j.appender.A1.maxFileSize=128kb
    #use html layout
    log4j.appender.A1.layout=org.apache.log4j.HTMLLayout
      

  2.   

    因为你写的是./conf/log4j.properties你自己先看看
    classes/conf/或者bin/conf下面有没有log4j.properties
      

  3.   

    这不是web应用,就是一个普通桌面程序,不是log4j.properties路径的问题,我跟过代码,能找到log4j.properties的
    现在的问题是Logger 不能获取到配置文件中的Appender,从日志输出上看,Logger 只是获取到默认的Appender很想结贴,可问题没有解决,不过还是谢谢大家关注,继续吧,Help me!,please
      

  4.   

    Appender好像有问题哦;
    参考下这个,我使用的这个没有问题:
    ## LOGGERS ##
    #define a logger 
    #log4j.rootLogger=DEBUG,console,file
    log4j.rootLogger=INFO,console,file## APPENDERS ##
    # define an appender named console, which is set to be a ConsoleAppender
    log4j.appender.console=org.apache.log4j.ConsoleAppender# define an appender named file, which is set to be a RollingFileAppender
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=D:/zzt/logs/2009.log#set the log's size
    log4j.appender.file.MaxFileSize=1000KB
    log4j.appender.file.MaxBackupIndex=20## LAYOUTS ##
    # assign a SimpleLayout to console appender
    log4j.appender.console.layout=org.apache.log4j.SimpleLayout# assign a PatternLayout to file appender
    log4j.appender.file.layout=org.apache.log4j.PatternLayout
    # For debug
    # log4j.appender.file.layout.ConversionPattern=[%-5p][%t][%C][%d{yyyy-MM-dd HH:mm:ss}] %m%n
    # For deployment
    log4j.appender.file.layout.ConversionPattern=[%-5p][%d{yyyy-MM-dd HH:mm:ss}] %m%n
      

  5.   

    你自己先看看
    classes/conf/或者bin/conf下面有没有log4j.properties
      

  6.   

    你的程序应该改成这样吧。
    import org.apache.log4j.*;public class Log4j { 
    private final static String CLASS_NAME = Log4j.class.getName(); 
    public static Logger log = Logger.getLogger(CLASS_NAME); 
            //BasicConfigurator.configure(new ConsoleAppender(new PatternLayout(
            // "%-r\t%-d{yyyy-MM-dd HH:mm:ss}\t%p\t%-t\t%l\t%m%n"))); 
            
            public static void main(String[] args) { 
             BasicConfigurator.configure();
             PropertyConfigurator.configure(".\\conf\\log4j.properties"); 
                            log.debug("ALL:" + Level.ALL_INT); 
    log.debug("DEBUG:" + Level.DEBUG_INT); 
    log.info("INFO:" + Level.INFO_INT); 
    log.warn("WARN:" + Level.WARN_INT); 
    log.error("ERROR" + Level.ERROR_INT); 
    log.fatal("FATAL" + Level.FATAL_INT); 
    log.fatal("OFF" + Level.OFF_INT); 

    } 注意路径的地方要用转译符号
      

  7.   

    我没有测试。不过我感觉PropertyConfigurator.configure("./conf/log4j.properties"); 应该在最开始用static加载。应该把
    static {
        PropertyConfigurator.configure("./conf/log4j.properties"); 
    }
    放在程序最开始,这个有可能会影响public static Logger log = Logger.getLogger(CLASS_NAME);另外我印象中路径是不能用./或../的,楼主试试将路径修改为conf/log4j.properties试试。即修改为PropertyConfigurator.configure("conf/log4j.properties");
      

  8.   

    给你个我的例子:
    web.xml中加入下面的配置 <!-- Log4j -->
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>webApp.root</param-value>
    </context-param> <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/classes/log4j.properties</param-value>
    </context-param> <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>600000</param-value>
    </context-param>
    <listener>
    <listener-class>
    org.springframework.web.util.Log4jConfigListener
    </listener-class>
    </listener>
    <!-- Log4j -->log4j的配置:### 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# operate logs
    log4j.appender.operate=org.apache.log4j.FileAppender
    log4j.appender.operate.File=${webApp.root}/logs/court-operate.log
    log4j.appender.operate.layout=org.apache.log4j.PatternLayout
    log4j.appender.operate.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n# exception logs
    log4j.appender.exception=org.apache.log4j.FileAppender
    log4j.appender.exception.File=${webApp.root}/logs/court-exception.log
    log4j.appender.exception.layout=org.apache.log4j.PatternLayout
    log4j.appender.exception.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n### set log levels - for more verbose logging change 'info' to 'debug' ####log4j.rootLogger=info, stdout#log4j.logger.org.hibernate=info
    #log4j.logger.org.hibernate=debug### log HQL query parser activity
    #log4j.logger.org.hibernate.hql.ast.AST=debug### log just the SQL
    #log4j.logger.org.hibernate.SQL=debug### log JDBC bind parameters ###
    #log4j.logger.org.springframework = info, file
    #log4j.logger.org.hibernate.type = info, file
    log4j.logger.com.jw.court.exception = debug, exception
    log4j.logger.com.jw.court.web = debug, stdout, operate
    log4j.logger.com.jw.court.manager = debug, stdout, operate
      

  9.   

    谢谢大家,等了两天了,各位的建议都不能解决问题,
    再次说明一点,我不是在Web服务器上用Log4j,是桌面程序.
    为什么就是不按预期运行?
      

  10.   

    谢谢 大家,
    特别谢谢 zabaglione 的建议,我调整了一下你给语句的顺序,
    PropertyConfigurator.configure("../conf/log4j.properties");
    BasicConfigurator.configure();先加载配置文件,再调用BasicConfigurator.configure();
    哈哈,搞定了,谢谢
      

  11.   

    本来想,按侧重分配分数,好难分配呀,对不住大家了,全部给zabaglione
      

  12.   

    PropertyConfigurator.configure(".\\conf\log4j.properties"); 
      

  13.   

    PropertyConfigurator.configure(prefix+"\\WEB-INF\\log4j.properties");
    一般是这样用的,如:
    PropertyConfigurator.configure ( “.\\src\log4j.properties”);