【问题标题】:Where does the slf4j log file get saved?slf4j 日志文件保存在哪里?
【发布时间】:2014-03-19 20:43:42
【问题描述】:

我有以下导入:

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

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

【问题讨论】:

  • slf4j 只是一个 API。您应该有一个具体的实现(例如 log4j)。这个具体的实现有一个配置文件,它告诉你在哪里存储日志。
  • @ArnaudDenoyelle 他使用 slf4j-log4j12-1.6.4.jar 构建,这意味着他正在包含一个实现。

标签: java logging output slf4j bin


【解决方案1】:

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

当 slf4j 使用 logger 捕获日志消息时,它会被交给一个 appender,该 appender 决定如何处理该消息。默认情况下,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 documentation.

文件追加器示例:

<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>

【讨论】:

  • 我的构建路径上有 log4j 不是吗?
  • @user2763361 然后你应该在你的类路径中放一个 log4j 配置文件,log4j 会使用它。
  • 我需要调用什么配置文件才能找到它?
  • @user2763361 您不需要显式调用它。 Log4J 尝试在其初始化时找到它。您只需要将文件放在类路径中。
  • 日志文件在哪里输出?
【解决方案2】:

正如已经提到的,它只是一个外观,它有助于在不同的记录器实现之间轻松切换。例如,如果你想使用 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");
              }
            }

【讨论】:

  • 我需要把它放在src/main/resources吗?因为我没有main 作为src 的子文件夹。所以我把它放在src。然后我将你的mylogs.log 覆盖为/home/user/workspace/project/src/mylogs.log,然后运行HelloWorld,它并没有在所需位置输出日志文件。 (没有错误信息只是没有输出)
  • 是的,如果它是一个 Maven 项目,您将自动创建文件夹 /src/main/resources/。请看上面的屏幕截图。
  • 它不是一个Maven项目所以我只把它放在src
  • 是的,你会放在 /src/ 文件夹中。
  • 这是一个比用 XML 编写更简洁的实现。
【解决方案3】:

默认情况下它不会写入文件。您需要配置类似RollingFileAppender 的内容并让根记录器写入它(可能除了默认的ConsoleAppender)。

【讨论】:

  • 假设 OP 使用 log4j
  • @CeilingGecko 查看我的其他评论 - 他已经声明他包括 log4j。
【解决方案4】:

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

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

或者这个:

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

【讨论】:

    猜你喜欢
    • 2013-04-14
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多