我已经把log4j放到了我的buildpath中,但是当我运行我的应用程序时,我得到了以下消息:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

这些警告是什么意思?这里的阑尾是什么?


当前回答

考虑log4j JVM参数Dlog4j.configuration

一般来说:

添加指向log4j配置文件的JVM参数。 语法如下:

java [ options ] -jar file.jar [ arguments ]

一个真实的命令行示例如下所示:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2

对于IntelliJ IDE用户:

1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"

小贴士:

1.Eclipse IDE用户将找到等效的方法

2.对于运行/调试配置编辑器,很可能在开始时,您的特定可执行文件不存在。根据您当前正在处理的项目的大小,在目录中找到它可能会令人不快。如果在继续运行/调试配置之前只运行/执行一次文件(单击play),无论执行结果是什么,都不会太麻烦。

3.请注意您的工作目录、相对路径和类路径。

其他回答

如果log4j。你正在使用Spring Boot创建一个WAR文件部署到应用服务器上,你省略了一个web.xml文件来支持Spring Boot的自动配置,并且你没有得到任何日志消息,你需要显式地配置Log4j。假设您正在使用Log4j 1.2.x:

public class AppConfig extends SpringBootServletInitializer {

    public static void main( String[] args ) {
        // Launch the application
        ConfigurableApplicationContext context = SpringApplication.run( AppConfig.class, args );
    }

    @Override
    protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        InputStream log4j = this.getClass().getClassLoader().getResourceAsStream("log4j.properties");
        PropertyConfigurator.configure(log4j);
        return application;
    }

// Other beans as required...
}

如果你和很多项目一起工作,你可能会面临一个风格问题。

*你必须有一个lof4j。属性文件,此文件包括其他项目的日志属性。

*此外,您可以尝试将log4j属性文件放入src路径,当项目工作在Linux操作系统,其他项目的库和log4。属性文件可以放在一个文件夹下的类路径上的某个位置。

得到同样的错误。下面是导致错误信息的问题:

在配置log4j之前,我创建了一些使用Logger的对象:

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);

解决方案: 在main方法的开头配置log4j:

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file

原因可能是有些地方缺少“静态”这个词:

final static Logger logging = Logger.getLogger(ProcessorTest.class);

如果我让记录器的实例字段,我得到的正是这个非常警告:

No appenders could be found for logger (org.apache.kafka.producer.Sender)

更糟糕的是,警告不是指向ProcessorTest(错误存在的地方),而是指向一个完全不同的类(Sender)作为问题的来源。该类有正确的设置记录器,不需要任何更改!我们可以花很长时间来寻找这个问题!

对我来说,原因显然不同,错误消息具有误导性。

我的身材里只有这个。Gradle,它会抱怨在日志的开始缺少slf4j,但仍然会记录东西,尽管格式很差:

    compile 'log4j:log4j:1.2.17'

添加这个依赖会导致前面讨论过的“找不到追加器”错误消息,尽管我已经在src/main/java/log4j.properties中定义了它们:

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'

最后,添加以下依赖(我只是通过从另一个项目中复制它来猜测)解决了这个问题:

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'
    compile 'commons-logging:commons-logging:1.2'

我不知道为什么,但用这个就行了。对此有什么见解吗?