记录器(log4j)没有找到appender?

max*_*mus 341 java eclipse log4j

我已经将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.
Run Code Online (Sandbox Code Playgroud)

这些警告意味着什么?什么是appender在这里?

mab*_*aba 424

这个对log4j指南的简短介绍有点旧,但仍然有效.

该指南将为您提供有关如何使用记录器和追加器的一些信息.


只是为了让你前进,你可以采取两种简单的方法.

首先是将此行添加到main方法:

BasicConfigurator.configure();
Run Code Online (Sandbox Code Playgroud)

第二种方法是将此标准log4j.properties(取自上述指南)文件添加到您的类路径:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Run Code Online (Sandbox Code Playgroud)

  • 对于新的绊脚石...将log4j.properties文件添加到src/main/resources,这假设你有一个maven项目.src/main/resources中的东西包含在类路径中. (57认同)
  • 只是第一步是好的.引用从简介到log4j指南 (3认同)
  • 在IntelliJ idea中打开模块设置并选择资源文件夹并单击资源,它会自动将您的每个资源添加到类路径中. (2认同)

JDJ*_*JDJ 73

看起来您需要将log4j.properties文件的位置添加到Eclipse中的Classpath.

确保您的项目在Eclipse中打开,然后单击Eclipse顶部的"运行"菜单并单击以下内容:

  1. 运行配置
  2. 类路径(选项卡)
  3. 用户条目
  4. 高级(右侧按钮)
  5. 添加文件夹
  6. 然后导航到包含log4j.properties文件的文件夹
  7. 应用

不应再出现错误消息.


小智 44

快速解决方案

  1. 将代码添加到main函数:

    String log4jConfPath = "/path/to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
    
    Run Code Online (Sandbox Code Playgroud)
  2. / path/to创建一个名为log4j.properties的文件

    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{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n
    
    Run Code Online (Sandbox Code Playgroud)


ken*_*orb 34

这只是一个警告.

定影

出现这种情况的默认配置文件时log4j.properties,并log4j.xml不能发现和应用程序执行没有明确的配置.

要解决这个问题,只需创建/复制log4j.propertieslog4j.xml进入类路径中的某个位置(通常与jar文件相同).

可选择设置java选项:-Dlog4j.configuration=file:///path/to/log4j.properties.

log4j用于Thread.getContextClassLoader().getResource()查找默认配置文件,而不是直接检查文件系统.知道要放置的适当位置log4j.propertieslog4j.xml需要了解正在使用的类加载器的搜索策略.log4j不提供默认配置,因为在某些环境中可能禁止输出到控制台或文件系统.

调试

对于调试,您可以尝试使用-Dlog4j.debug=true参数.

配置 log4j.properties

示例配置log4j.properties:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN
Run Code Online (Sandbox Code Playgroud)

这是另一个使用多个appender的配置文件:

log4j.rootLogger=debug, stdout, R

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=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Run Code Online (Sandbox Code Playgroud)

Apache Solr

如果使用Solr,请复制<solr>/example/resources/log4j.properties类路径上的某个位置.

log4j.properties来自Solr的示例配置如下:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF
Run Code Online (Sandbox Code Playgroud)

也可以看看:


nos*_*ner 9

首先:创建一个log4j.properties文件

# Root logger option
log4j.rootLogger=INFO, stdout

# 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

将其放在 src/main/resources/ 中

之后,使用这两个依赖项:

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

有必要将此最终依赖项添加到 POM 文件中:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)


Sim*_*ant 7

您可以Logger在代码中使用记录消息.的Appender是附加到一个一个对象Logger将消息写入到一个特定的目标.有FileAppender写入文本文件或ConsoleAppender写入控制台.您需要显示Logger和Appender设置的代码以获得更多帮助.

请阅读本教程,以便更好地理解Logger和Appender的交互.


小智 7

如前所述,有两种方法

首先是将此行添加到main方法:

BasicConfigurator.configure();
Run Code Online (Sandbox Code Playgroud)

第二种方法是将此标准log4j.properties文件添加到您的类路径:

在采用第二种方法时,您需要确保正确初始化文件,例如.

Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");
Run Code Online (Sandbox Code Playgroud)

确保创建所需的文件夹以存储日志文件.


Sea*_*ene 7

这里的大多数答案都建议将log4j.properties文件放在正确的位置(对于maven项目,它应该位于src/main/resources)

但对我来说,问题是我的log4j.properties配置不正确.这是一个适合我的样本,你可以先试试.

# Root logger option
log4j.rootLogger=INFO, stdout

# 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

  • log4j 认为“找不到文件”和“文件中的不完整规范”是同一个错误的事实是浪费时间。 (4认同)

小智 6

当我尝试运行 JUnit 测试类时,我遇到了同样的问题。

在 src/test/resources 文件夹中手动添加 log4j.properties 文件后,问题得到解决。

将以下代码添加到 log4j.properties 文件解决了该问题:

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)


a3p*_*2.0 5

我犯了同样的错误.这里导致此错误消息的问题:

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

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);
Run Code Online (Sandbox Code Playgroud)

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

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file
Run Code Online (Sandbox Code Playgroud)


Jin*_*kur 5

我认为您应该了解 log4j jar 文件或 Java 代码在哪里查找 log4j 配置文件。

src/main/resources/log4j.properties是 Eclipse 路径。将它们放在适当的位置,这样您就不必在代码中硬编码绝对路径。

阅读我的文章和示例解决方案 https://askyourquestions.info/how-to-see-where-the-log-is-logger-in-slf4j/


小智 5

确保正确设置属性文件。再说一次,似乎编译器找不到属性文件,可以在pom上设置如下(仅当使用maven项目时)。

<build>
       <sourceDirectory> src/main/java</sourceDirectory>
       <testSourceDirectory> src/test/java</testSourceDirectory>
        <resources>
             <resource>
                  <directory>resources</directory>
             </resource>
        </resources>           
</build >
Run Code Online (Sandbox Code Playgroud)


fty*_*ty4 5

添加以下作为第一个代码:

Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(prop);
Run Code Online (Sandbox Code Playgroud)