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
org.slf4j.Logger logs to console, how do I log to file?
提问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 FileAppender
in 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 PropertyConfigurator
at 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。
- Import log4j package in the class.
- Inside the class, instantiate a logger object using Logger.getLogger( ) static method.
- Instantiate layouts (readymade or user-defined) to be assigned to appenders.
- Instantiate appenders and assign desired layout to them by passing the layout object as parameter to their constructors.
- Assign the instatiated appenders to the Logger object by invoking its addAppender( ) method with desired appender as parameter.
- Invoke appropriate printing methods on Logger object to perform logging.
- 在类中导入 log4j 包。
- 在类内部,使用 Logger.getLogger() 静态方法实例化一个记录器对象。
- 实例化要分配给 appender 的布局(现成的或用户定义的)。
- 通过将布局对象作为参数传递给其构造函数,实例化 appender 并为其分配所需的布局。
- 通过调用其 addAppender() 方法并将所需的 appender 作为参数,将 instatiated appender 分配给 Logger 对象。
- 在 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>