繁体   English   中英

请正确初始化log4j系统警告

[英]Please initialize the log4j system properly warning

这是错误消息 -

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日志记录吗?

添加代码

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” 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); 
    }
}

从错误消息中的链接:

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

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

另外,使用logback

好的,所以我通过改变它来让它工作

log4j.rootLogger=DebugAppender

对此

log4j.rootLogger=DEBUG, DebugAppender

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

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

如果在运行使用 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

我的解决方法是将“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%

这对我有用:

public static void main(String[] args) {

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

没有回答的方法解决了在 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

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

对我有用的是创建一个 log4j 属性文件(您可以在网上找到许多示例)并将其放在项目目录中的属性文件夹中(如果不存在,则创建此文件夹)。 右键单击文件夹和Build Path->Use as Source Folder

希望能帮助到你!

补充一下@Gevorg,如果你在本地运行Spark也有类似情况,把log4j.properties文件放在主文件夹下的resources文件夹下。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM