slf4j日志文件保存在哪里?

问题描述 投票:0回答:5

我有以下进口:

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

以及以下实例:

private static Logger logger = LoggerFactory.getLogger(Test.class);

以及我的 Main 方法中的以下内容:

logger.info("SOME MESSAGE: ");

但是,我无法在任何地方找到输出。我所看到的是我的控制台中有:

21:21:24.235 [main] INFO  some_folder.Test - SOME MESSAGE: 

如何找到日志文件?

请注意,以下内容位于我的构建路径上:

slf4j-api-1.7.5.jar

slf4j-log4j12-1.6.4.jar

我阅读了类似问题的答案,但实际上没有人说如何解决问题。

java logging output slf4j bin
5个回答
62
投票

slf4j 只是一个 API。您应该有一个具体的实现(例如 log4j)。这个具体实现有一个配置文件,它告诉您在哪里存储日志。

enter image description here

当 slf4j 使用记录器捕获日志消息时,会将其交给附加程序,由附加程序决定如何处理该消息。默认情况下,ConsoleAppender 在控制台中显示消息。

默认配置文件是:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

  <Appenders>
    <!-- By default => console -->
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </Appenders>

  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>

如果您将可用的配置文件放在类路径中,那么您的具体实现(在您的例子中为 log4j)将找到并使用它。请参阅 Log4J 文档。

文件追加器示例:

<Appenders>
<File name="File" fileName="${filename}">
  <PatternLayout>
    <pattern>%d %p %C{1.} [%t] %m%n</pattern>
  </PatternLayout>
</File>

...
</Appenders>

带有文件附加器的完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

  <Appenders>
    <File name="File" fileName="${filename}">
      <PatternLayout>
        <pattern>%d %p %C{1.} [%t] %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>

  <Loggers>
    <Root level="error">
      <AppenderRef ref="File"/>
    </Root>
  </Loggers>

</Configuration>

43
投票

正如已经提到的,它只是一个外观,它有助于轻松地在不同的记录器实现之间切换。例如,如果您想使用 log4j 实现。

示例代码如下所示。

如果你使用maven获取依赖项

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.5</version>
    </dependency>

在位置 src/main/resources/log4j.properties 的 log4j.properties 中包含以下内容

            log4j.rootLogger=DEBUG, STDOUT, file

            log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
            log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout
            log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

            log4j.appender.file=org.apache.log4j.RollingFileAppender
            log4j.appender.file.File=mylogs.log
            log4j.appender.file.layout=org.apache.log4j.PatternLayout
            log4j.appender.file.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss} %-5p %c{1}:%L - %m%n

下面的 Hello world 代码将按照上述配置打印在控制台中并打印到日志文件中。

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

            public class HelloWorld {
              public static void main(String[] args) {
                Logger logger = LoggerFactory.getLogger(HelloWorld.class);
                logger.info("Hello World");
              }
            }

enter image description here


4
投票

默认情况下它不写入文件。您需要配置类似

RollingFileAppender
的内容,并让根记录器写入它(可能除了默认的
ConsoleAppender
之外)。


1
投票

日志文件不可见,因为 slf4j 配置文件位置需要使用以下参数传递给 java run 命令。(例如)

-Dlogging.config={file_location}\log4j2.xml 

或者这个:

-Dlog4j.configurationFile={file_location}\log4j2.xml

0
投票

背景

回复:

我阅读了类似问题的答案,但实际上没有人说如何解决问题。

问题的一部分

gradle
(而不是Maven)。

使用说明

要登录项目根目录下名为:

my-log-file.log
的文件,请使用:

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

...

private static final Logger LOGGER = LoggerFactory.getLogger(Main.class);

...

LOGGER.info("This is an info message");
LOGGER.error("This is an error message");

可以使用以下 2 个步骤:

1.添加输出日志文件的依赖到
build.gradle

build.gradle
中添加:

dependencies {
    // Allow logging to file.
    implementation 'org.slf4j:slf4j-api:1.7.32'
    implementation 'ch.qos.logback:logback-classic:1.2.6'
}

2.创建日志输出配置文件

创建一个名为:

logback.xml
的文件并将其存储在:
src/main/resources
(不在
src/main/resources/com/<projectname>/
中)。它应该包含:

<configuration>

    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>my-log-file.log</file> <!-- Specify the file name here -->
        <encoder>
            <pattern>%date %level [%thread] %logger{10} [%file:%line] - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE"/>
    </root>

</configuration>

就是这样,如果您现在构建并运行您的java程序,您应该在存储库/项目的根目录中看到一个名为:

my-log-file.log
的文件,内容为:

2023-10-28 20:41:55,394 INFO [main] c.d.Main [Main.java:36] - This is an info message
2023-10-28 20:41:55,394 ERROR [main] c.d.Main [Main.java:37] - This is an error message

假设

这个问题假设您已经有一个有效的

org.slf4j.Logger
设置,可以在终端中显示日志信息,但不会将其存储到文件中。

© www.soinside.com 2019 - 2024. All rights reserved.