【问题标题】:How to get SLF4J "Hello World" working with log4j?如何让 SLF4J“Hello World”与 log4j 一起工作?
【发布时间】:2011-05-17 16:44:00
【问题描述】:

SLF4J 中的“Hello World”示例对我不起作用。我想这是因为我将 slf4j-log4 添加到了我的类路径中。我应该直接配置 log4j 以使 hello world 工作吗?

log4j:WARN No appenders could be found for logger (HelloWorld).
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初始化,还是不行:

public static void main(String[] params) {
        org.apache.log4j.Logger.getRootLogger().addAppender(new ConsoleAppender());
        Logger logger = org.slf4j.LoggerFactory.getLogger(TestBase.class);
        logger.info("Hello World");
    }

我得到:

log4j:ERROR No output stream or file set for the appender named [null].

【问题讨论】:

  • @Michael,我承认我略读多于阅读。我看到他们要求我将 slf4j-simple.jar 添加到我的类路径中,但我确实想使用 log4j。相应地编辑了我的问题标题。
  • 你想使用 log4j 还是 slf4j 而不是 log4j?
  • @Stas - 我还没有决定。 stackoverflow.com/questions/4311086/…
  • 当控制台警告给你一个 URL 来查看,并且 URL 显示 Knowing the appropriate location to place log4j.properties or log4j.xml requires understanding the search strategy of the class loader in use.,通常建议花几分钟了解搜索策略而不是直接跳转到 stackoverflow 寻求帮助。

标签: java logging log4j slf4j


【解决方案1】:

这是一个在后端使用 slf4j 作为外观和 log4j 的工作示例:

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>xxx</groupId>
    <artifactId>xxx</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.30</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.13.3</version>
        </dependency>
    </dependencies>
</project>

src/main/resources/log4j.properties

# Root logger option
log4j.rootLogger=DEBUG, 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

src/main/java/Main.java

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);

    /**
     * Default private constructor.
     */
    private Main() {
    }

    /**
     * Main method.
     *
     * @param args Arguments passed to the execution of the application
     */
    public static void main(final String[] args) {
        logger.info("Message to log");
    }
}

【讨论】:

    【解决方案2】:

    以下是一个例子。您可以查看详细信息http://jkssweetlife.com/configure-slf4j-working-various-logging-frameworks/并下载完整代码here

    • 如果您使用 maven,请在您的 pom 中添加以下依赖项,否则,只需下载 jar 文件并放在您的类路径中

      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-api</artifactId>
          <version>1.7.7</version>
      </dependency>
      
      <dependency>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
          <version>1.7.7</version>
      </dependency>
      
    • 配置 log4j.properties

      log4j.rootLogger=TRACE, 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'T'HH:mm:ss.SSS} %-5p [%c] - %m%n
      
    • Java 示例

      public class Slf4jExample {
          public static void main(String[] args) {
      
              Logger logger = LoggerFactory.getLogger(Slf4jExample.class);
      
              final String message = "Hello logging!";
              logger.trace(message);
              logger.debug(message);
              logger.info(message);
              logger.warn(message);
              logger.error(message);
          }
      }
      

    【讨论】:

    • 实际代码例如使这是一个更好的答案 IMO
    • @ylu,是否需要指定要测试的 slf4j-log4j12 的范围?喜欢这里:mvnrepository.com/artifact/org.slf4j/slf4j-log4j12/1.7.25
    • @MinnieShi 如果您只希望 slf4j-log4j12 可用于测试编译和执行阶段,那么您可以将范围指定为测试。如果没有像我上面所做的那样指定范围,则默认范围是“编译”(意味着依赖项可用于编译、运行时和测试)。希望对您有所帮助。
    【解决方案3】:
    you need to add 3 dependency ( API+ API implementation + log4j dependency) 
    Add also this 
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.5</version>
    </dependency>
    
    # And to see log in command line , set log4j.properties 
    
    # Root logger option
    log4j.rootLogger=INFO, file, 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
    
    #And to see log in file  , set log4j.properties 
    # Direct log messages to a log file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=./logs/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
    

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题。直接使用 log4j api 时,我在 log4j.properties 文件中从代码中调用了我自己的自定义记录器。如果您正在使用 slf4j api 调用,您可能正在使用默认的根记录器,因此您必须将其配置为与 log4j.properties 中的附加程序相关联:

      # 将 root logger 级别设置为 DEBUG,并将其唯一的 appender 设置为 A1。 log4j.rootLogger=调试,A1 # A1 设置为 ConsoleAppender。 log4j.appender.A1=org.apache.log4j.ConsoleAppender

      【讨论】:

        【解决方案5】:

        如果您想使用slf4j simple,您需要在您的类路径中添加这些jar 文件:

        • slf4j-api-1.6.1.jar
        • slf4j-simple-1.6.1.jar

        如果你想使用slf4jlog4j,你的类路径中需要这些jar 文件:

        • slf4j-api-1.6.1.jar
        • slf4j-log4j12-1.6.1.jar
        • log4j-1.2.16.jar

        不多不少。使用slf4j simple,您将获得INFO 或更高级别的基本日志记录到您的控制台。使用log4j,你必须configure it accordingly

        【讨论】:

        • 我正在使用 slf4j 和 log4j。我包括了提到的所有三个依赖项,但它仍然显示相同的错误。请帮帮我。谢谢
        • 对我来说 log4j-1.2.16.jar 不需要让它工作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-01
        • 2014-10-08
        相关资源
        最近更新 更多