Java org.slf4j.Logger 登录到控制台,我如何登录到文件?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/20328646/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 01:06:44  来源:igfitidea点击:

org.slf4j.Logger logs to console, how do I log to file?

javalogginglog4jslf4j

提问by user840930

I am using the org.slf4j.Logger to log output. Output is going to console. How do I get logging logged to a log file?

我正在使用 org.slf4j.Logger 来记录输出。输出将进入控制台。如何将日志记录到日志文件中?

 private static final Logger LOG = LoggerFactory.getLogger(ClassName.class );
 LOG.info("Logging output to console");

I am not using a log4j.properties file. I am assuming I will need one.

我没有使用 log4j.properties 文件。我假设我需要一个。

I added the following log4j.properties file and placed it in different parts of my eclipse project.

我添加了以下 log4j.properties 文件并将其放置在我的 eclipse 项目的不同部分。

 # Define the file appender
 log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender
 log4j.appender.FileAppender.File=logger.log
 log4j.appender.FileAppender.layout = org.apache.log4j.PatternLayout
 log4j.appender.FileAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

 # Direct all messages there
 log4j.rootLogger = INFO, FileAppender

I even used

我什至用过

 PropertyConfigurator.configure("log4j.properties");

But no logging file appears. log4j.properties doesn't seem to have an effect.

但是没有出现日志文件。log4j.properties 似乎没有效果。

回答by Chris Mantle

The simplest way, I think, is to define a FileAppenderin a log4j.properties file:

我认为,最简单的方法是FileAppender在 log4j.properties 文件中定义一个:

# Define the file appender
log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.FileAppender.File=[log filename].log
log4j.appender.FileAppender.layout = org.apache.log4j.PatternLayout
log4j.appender.FileAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# Direct all messages there
log4j.rootLogger = INFO, FileAppender

Just replace [log filename]with some relevant filename. I think Log4j is able to automatically locate the file when you run the project from Eclipse if the file is in your project directory, but I'm not 100% sure. You can use PropertyConfiguratorat the start of your application to tell Log4j where to find the properties file, e.g.:

只需[log filename]用一些相关的文件名替换即可。如果文件位于项目目录中,我认为 Log4j 能够在您从 Eclipse 运行项目时自动定位该文件,但我不是 100% 确定。您可以PropertyConfigurator在应用程序开始时使用来告诉 Log4j 在哪里可以找到属性文件,例如:

PropertyConfigurator.configure("log4j.properties");

回答by jos

You can create a log4j.xml in the resource folder.

您可以在资源文件夹中创建一个 log4j.xml。

  1. Import log4j package in the class.
  2. Inside the class, instantiate a logger object using Logger.getLogger( ) static method.
  3. Instantiate layouts (readymade or user-defined) to be assigned to appenders.
  4. Instantiate appenders and assign desired layout to them by passing the layout object as parameter to their constructors.
  5. Assign the instatiated appenders to the Logger object by invoking its addAppender( ) method with desired appender as parameter.
  6. Invoke appropriate printing methods on Logger object to perform logging.
  1. 在类中导入 log4j 包。
  2. 在类内部,使用 Logger.getLogger() 静态方法实例化一个记录器对象。
  3. 实例化要分配给 appender 的布局(现成的或用户定义的)。
  4. 通过将布局对象作为参数传递给其构造函数,实例化 appender 并为其分配所需的布局。
  5. 通过调用其 addAppender() 方法并将所需的 appender 作为参数,将 instatiated appender 分配给 Logger 对象。
  6. 在 Logger 对象上调用适当的打印方法来执行日志记录。

.

.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p [%t] %c{1}.%M(%L) | %m%n" />
        </layout>
    </appender>
    <appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
        <rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
            <param name="fileNamePattern" value="/yourfolder/debug_%d{dd-MM-yy}.log" />

        </rollingPolicy>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%p [%t] %c{1}.%M(%L) | %m%n" />
        </layout>

    </appender>
    <root>
        <level value="WARN" />
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</log4j:configuration>