Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取SLF4J“;“你好,世界”;使用log4j?_Java_Logging_Log4j_Slf4j - Fatal编程技术网

Java 如何获取SLF4J“;“你好,世界”;使用log4j?

Java 如何获取SLF4J“;“你好,世界”;使用log4j?,java,logging,log4j,slf4j,Java,Logging,Log4j,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

来自的“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].

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

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

如果要使用
slf4j
log4j
,则需要在类路径上使用这些
jar
文件:

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

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

我也有同样的问题。直接使用log4japi时,我从代码中调用了log4j.properties文件中我自己的自定义记录器。如果您使用的是slf4j api调用,则可能使用的是默认根记录器,因此必须在log4j.properties中将其配置为与appender关联:

# 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 #将root logger级别设置为DEBUG,将其唯一的appender设置为A1。 log4j.rootLogger=DEBUG,A1 #A1被设置为ConsolePender。 log4j.appender.A1=org.apache.log4j.ConsoleAppender
下面是一个例子。您可以查看详细信息并下载完整代码

  • 如果您使用的是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>
    
  • 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);
        }
    }
    
您需要添加3个依赖项(API+API实现+log4j依赖项)
再加上这个
org.apache.logging.log4j
log4j型芯
2.5
#要查看登录命令行,请设置log4j.properties
#根记录器选项
log4j.rootLogger=信息、文件、标准输出
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.patternalyout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyyy-MM-dd HH:MM:ss}%-5p%c{1}:%L-%m%n
#要查看登录文件,请设置log4j.properties
#将日志消息直接发送到日志文件
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.patternalyout
log4j.appender.file.layout.ConversionPattern=%d{yyyyy-MM-dd HH:MM:ss}%-5p%c{1}:%L-%m%n

下面是一个使用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/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");
    }
}

@迈克尔,我承认我是略读而不是阅读。我看到他们要求我将slf4j-simple.jar添加到我的类路径中,但我确实想使用log4j。相应地编辑了我的问题标题。你想在log4j上使用log4j还是slf4j?@Stas-我还没决定。当控制台警告向您提供一个要查看的URL,并且URL显示
知道放置log4j.properties或log4j.xml的适当位置时,需要了解正在使用的类加载器的搜索策略。
,一般来说,最好花几分钟来理解搜索策略,而不是直接跳到stackoverflow寻求帮助。我包括了前面提到的所有三个依赖项,但仍然显示了相同的错误。请帮帮我。感谢我log4j-1.2.16.jar不需要使它工作。例如,实际代码使这成为一个更好的答案IMO@ylu,是否需要指定要测试的slf4j-log4j12的范围?如下所示:@MinnieShi如果您只希望slf4j-log4j12可用于测试编译和执行阶段,那么您可以将范围指定为测试。若并没有像我上面所做的那个样指定范围,那个么默认范围是“compile”(这意味着依赖关系可用于compile、runtime和test)。希望能有帮助。
<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>
# 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
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");
    }
}