Log4j:如何配置最简单的文件记录?

mic*_*ico 63 java logging log4j

我的故事:

我想制作一个像最简单的log4j记录器一样简单的事情,它将行记录到文件中.我找到了几个带有一些功能的例子,但不是一个真正有用的基本的,一般的,而不是一个解释每行如何工作的例子.

题:

任何人都可以提供吗?

先决条件:

  • 我已经知道放置文件的位置了,我已经配置了log4j并且正在进行控制台日志记录.
  • 现在我想记录一个文件,并在程序运行后从文件系统中找到该文件.
  • 需要添加到现有log4j.properties文件的行是所需的输出.

Tom*_*zak 77

我有一个通用的log4j.xml文件:

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration debug="false">

    <appender name="default.console" class="org.apache.log4j.ConsoleAppender">
        <param name="target" value="System.out" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
        </layout>
    </appender>

    <appender name="default.file" class="org.apache.log4j.FileAppender">
        <param name="file" value="/log/mylogfile.log" />
        <param name="append" value="false" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
        </layout>
    </appender>

    <appender name="another.file" class="org.apache.log4j.FileAppender">
        <param name="file" value="/log/anotherlogfile.log" />
        <param name="append" value="false" />
        <param name="threshold" value="debug" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %-5p [%c{1}] - %m%n" />
        </layout>
    </appender>

    <logger name="com.yourcompany.SomeClass" additivity="false">
        <level value="debug" />
        <appender-ref ref="another.file" />
    </logger>

    <root>
        <priority value="info" />
        <appender-ref ref="default.console" />
        <appender-ref ref="default.file" />
    </root>
</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)

使用一个控制台,两个文件追加器和一个记录器,使用第二个文件appender而不是第一个.

编辑

在其中一个较旧的项目中,我找到了一个简单的log4j.properties文件:

# For the general syntax of property based configuration files see
# the documentation of org.apache.log4j.PropertyConfigurator.

# The root category uses two appenders: default.out and default.file.
# The first one gathers all log output, the latter only starting with 
# the priority INFO.
# The root priority is DEBUG, so that all classes can be logged unless 
# defined otherwise in more specific properties.
log4j.rootLogger=DEBUG, default.out, default.file

# System.out.println appender for all classes
log4j.appender.default.out=org.apache.log4j.ConsoleAppender
log4j.appender.default.out.threshold=DEBUG
log4j.appender.default.out.layout=org.apache.log4j.PatternLayout
log4j.appender.default.out.layout.ConversionPattern=%-5p %c: %m%n

log4j.appender.default.file=org.apache.log4j.FileAppender
log4j.appender.default.file.append=true
log4j.appender.default.file.file=/log/mylogfile.log
log4j.appender.default.file.threshold=INFO
log4j.appender.default.file.layout=org.apache.log4j.PatternLayout
log4j.appender.default.file.layout.ConversionPattern=%-5p %c: %m%n
Run Code Online (Sandbox Code Playgroud)

有关所有布局参数的说明,请参见:log4j PatternLayout参数


nsf*_*n55 31

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

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

   <appender name="fileAppender" class="org.apache.log4j.RollingFileAppender">
      <param name="Threshold" value="INFO" />
      <param name="File" value="sample.log"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d %-5p  [%c{1}] %m %n" />
      </layout>
   </appender>

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="fileAppender" /> 
  </root> 

</log4j:configuration>
Run Code Online (Sandbox Code Playgroud)

Log4j可能有点令人困惑.所以让我们试着理解这个文件中发生了什么:在log4j中你有两个基本的构造appender和logger.

Appenders定义事物的附加方式和位置.它会被记录到文件,控制台,数据库等吗?在这种情况下,您指定sample.log使用layout标记中指定的模式将指向fileAppender的日志语句放入文件中.您可以轻松地为控制台或数据库创建一个appender.控制台appender将在屏幕上指定类似布局的内容,数据库appender将具有连接详细信息和表名称.

记录器在冒泡时响应记录事件.如果事件捕获了特定记录器的兴趣,它将调用其附加的appender.在下面的示例中,只有一个记录器是根记录器 - 默认情况下会响应所有记录事件.除根记录器外,您还可以指定更具体的记录器,以响应特定包中的事件.这些记录器可以使用appender-ref标记指定自己的appender,否则将从根记录器继承appender.使用更具体的记录器可以微调特定包上的日志记录级别或将某些包定向到其他appender.

所以这个文件说的是:

  1. 创建一个记录到文件sample.log的fileAppender
  2. 将该appender附加到根记录器.
  3. 根记录器将响应任何事件,至少与'debug'级别一样详细
  4. appender配置为仅记录至少与'info'一样详细的事件

净输出是,如果你logger.debug("blah blah")的代码中有一个,它将被忽略.A logger.info("Blah blah");将输出到sample.log.

下面的代码段可以使用log4j标记添加到上面的文件中.此记录器将继承appender,<root>但会将包中的所有日志记录事件限制org.springframework为级别info或更高级别的记录事件.

  <!-- Example Package level Logger -->
    <logger name="org.springframework">
        <level value="info"/>
    </logger>   
Run Code Online (Sandbox Code Playgroud)

  • 我认为这是一个很大的因素.在容器外面我相信这会将日志文件放在你的`CWD`中,但如果你正在配置容器中的日志记录,容器可能会把它放在其他地方. (2认同)

Mar*_*coS 10

这是我经常使用的一个简单的:

# Set up logging to include a file record of the output
# Note: the file is always created, even if there is 
# no actual output.
log4j.rootLogger=error, stdout, R

# Log format to standard out
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=   %5p\t[%d] [%t] (%F:%L)\n     \t%m%n\n

# File based log output
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=owls_conditions.log
log4j.appender.R.MaxFileSize=10000KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=   %5p\t[%d] [%t] (%F:%L)\n     \t%m%n\n
Run Code Online (Sandbox Code Playgroud)

日志的格式如下:

ERROR   [2009-09-13 09:56:01,760] [main] (RDFDefaultErrorHandler.java:44)
        http://www.xfront.com/owl/ontologies/camera/#(line 1 column 1): Content is not allowed in prolog.
Run Code Online (Sandbox Code Playgroud)

这种格式由字符串定义%5p\t[%d] [%t] (%F:%L)\n \t%m%n\n.您可以在log4j javadoc中PatternLayout读取转换字符的含义.

包含的注释应该有助于理解它的作用.附加说明:

  • 它记录到控制台和文件; 在这种情况下,文件被命名owls_conditions.log:根据您的需要进行更改;
  • 文件在达到10000KB时轮换,并保留一个备份文件