请正确初始化log4j系统警告

时间:2012-01-20 15:21:25

标签: java log4j

以下是错误消息 -

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

以下是SerialPortUtil类中的调用 -

private static final Logger log = Logger.getLogger(SerialPortUtil.class.getSimpleName());
.
.
.
log.info("Serial port " + port.getName() + " is available");

以下是我的log4j.properties文件的内容 -

log4j.rootLogger=DebugAppender

#Debug logging
log4j.appender.DebugAppender=org.apache.log4j.RollingFileAppender
log4j.appender.DebugAppender.Threshold=DEBUG
log4j.appender.DebugAppender.File=activityLog.log
log4j.appender.DebugAppender.MaxFileSize=200KB
log4j.appender.DebugAppender.MaxBackupIndex=5
log4j.appender.DebugAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.DebugAppender.layout.ConversionPattern=%d{DATE} %t - %m%n

属性文件位于类路径上。

一切看起来都对我,所以发生了什么? DEBUG阈值也不应该捕获INFO日志记录吗?

11 个答案:

答案 0 :(得分:8)

从错误消息中的链接:

  

当找不到默认配置文件log4j.properties和log4j.xml且应用程序不执行显式配置时,会发生这种情况。 log4j使用Thread.getContextClassLoader()。getResource()来定位默认配置文件,而不是直接检查文件系统。了解放置log4j.properties或log4j.xml的适当位置需要了解正在使用的类加载器的搜索策略。 log4j不提供默认配置,因为在某些环境中可能禁止输出到控制台或文件系统。另请参阅FAQ:为什么log4j无法在J2EE或WAR应用程序中找到我的属性?

找不到配置文件。您使用的是xml还是属性文件?

另外,请使用logback

答案 1 :(得分:6)

好吧,所以我通过改变这个来实现它

log4j.rootLogger=DebugAppender

到这个

log4j.rootLogger=DEBUG, DebugAppender

显然你必须首先指定rootLogger的日志记录级别?如果我浪费了任何人的时间,我道歉。

另外,我决定回答我自己的问题,因为这不是类路径问题。

答案 2 :(得分:3)

如果在运行使用log4j的程序时遇到错误/警告,解决方法是添加类加载器可以看到的log4j.properties。通常它位于Java项目的“src”文件夹中: 将以下内容添加到文件

log4j.rootLogger=INFO, 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

答案 3 :(得分:3)

我的修复是将“log4j.properties”放入“src”文件夹。它在我的包文件夹中不起作用,它必须是源的根源。将它添加到构建路径,然后将其移动到“参考库”也不起作用。

重复:将log4j.properties放在src文件夹的根目录下。

我的log4j.properties文件具有以下内容,该内容适用于基于Eclipse的最新版Spring Tool Suite。

# Configure logging for testing: optionally with log file
#log4j.rootLogger=INFO, stdout
log4j.rootLogger=WARN, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%

答案 4 :(得分:1)

尝试在main中执行以下操作:

public static void main(String[] args) {
     PropertyConfigurator.configure(args[0]);
    //... your code

你需要告诉log4j它的配置应该是什么。

答案 5 :(得分:1)

添加代码

BasicConfigurator.configure();

在您的静态主类中,如下所示..

注意: 添加“\ hadoop-2.7.1 \ share \ hadoop \ common \ lib \ commons-logging-1.1.3.jar& \ hadoop-2.7.1 \ share \ hadoop \ common \ lib \ log4j-1.2.17.jar“  作为外部参考

import org.apache.log4j.BasicConfigurator;

public class ViewCountDriver extends Configured implements Tool{

    public static void main(String[]args) throws Exception{

        BasicConfigurator.configure(); 

        int exitcode = ToolRunner.run(new ViewCountDriver(), args);
        System.exit(exitcode); 
    }
}

答案 6 :(得分:1)

要添加到@Gevorg,如果您在本地运行Spark的情况类似,请将log4j.properties文件放在主文件夹下名为resources的文件夹中。

答案 7 :(得分:1)

为我工作:

public static void main(String[] args) {

        Properties props = new Properties();
        props.load(new FileInputStream("src/log4j.properties"));
        PropertyConfigurator.configure(props);

答案 8 :(得分:1)

没有一种方法可以解决在NetBeans中未为非Maven jsf Web项目找到log4j.properties文件的问题。答案是:

  1. 在项目根文件夹(最外部的文件夹)中创建一个名为resources的文件夹。
  2. 在左侧菜单中的项目浏览器中右键单击项目,选择属性。
  3. 打开“类别中的源”,在“源包文件夹”中添加该文件夹。
  4. 打开“类别中的运行”并将其添加到VM选项:Dlog4j.configuration=resources/log4j.properties
  5. 单击“确定”,即可构建并部署项目。

我在log4j文件中编写了特殊模式,以检查是否使用了log4j我的文件:

# Root Logger Option
log4j.rootLogger=INFO, console

# Redirect Log Messages To 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=%-5p | %d{yyyy-MM-dd HH:mm:ss} | [%t] %C{2} xxxx (%F:%L) - %m%n

我检查了它是因为如果您在log4j的代码中使用BasicConfigurator.configure();,请使用预定义的模式。

答案 9 :(得分:0)

对我来说有用的是创建一个log4j属性文件(你可以通过网络找到很多例子)并将它放在项目目录的属性文件夹中(如果不是exicts,则创建此文件夹)。右键单击文件夹和Build Path->Use as Source Folder

希望它有所帮助!

答案 10 :(得分:0)

只需在主要方法的开头配置您的log4j属性文件路径:例如:PropertyConfigurator.configure(“ D:\ files \ log4j.properties”);