当前位置: 首页 > 教程 > Log4j >

Log4j Appender日志输出

精华
小牛编辑
105浏览
2023-03-14

Log4j 提供 Appender 对象,主要负责将日志消息打印到不同的目的地,例如控制台、文件、NT 事件日志、Swing 组件、JMS、远程 UNIX 系统日志守护进程、Socket套接字等。

每个 Appender 对象都有与其相关的不同属性,这些属性指定了该对象的行为。

属性 描述
layout Appender 使用 Layout 对象和与它们关联的转换模式来格式化日志信息。
target 目标可能是文件、控制台或其他项目,具体取决于附加程序。
level 有必要控制日志消息的过滤。
threshold Appender 可以包含一个与记录器级别无关的阈值级别。Appender 忽略包含低于阈值级别的任何日志消息。
filter Filter 对象可以读取级别匹配之外的日志信息,并决定日志请求应该由特定的 Appender 处理还是忽略。

我们可以通过在配置文件中使用给定方法添加以下设置来将 Appender 对象添加到 Logger。

log4j.logger.[logger-name]=level, appender1,appender..n  

我们也可以用 XML 格式编写相同的配置,如下所示:

<logger name="com.apress.logging.log4j" additivity="false">  
   <appender-ref ref="appender1"/>  
   <appender-ref ref="appender2"/>  
</logger>  

甚至我们也可以在程序内部添加 Appender 对象,然后我们可以使用下面的方法:

public void  addAppender(Appender appender); 

addAppender() 方法用于向 Logger 对象添加一个 Appender。我们可以将许多 Appender 对象添加到逗号分隔列表中的记录器中,每个对象将日志信息打印到不同的目的地。

下面列出了常见的Appender对象:

  • ConsoleAppender: Console Appender 使用用户指定的布局将日志事件附加到 System.out 或 System.err。System.out 是默认目标。它对于调试目的很有用,但在生产环境中使用没有太大好处。
  • FileAppender:将日志事件附加到文件中。它支持另外两个 appender 类:
  • RollingFileAppender、DailyRollingFileAppender:两者都是使用最广泛的 appender,它们支持将日志写入文件。
  • JDBCAppender: JDBCAppender 用于将日志事件发送到数据库。每个 append 调用都会添加到一个 ArrayList 缓冲区。当缓冲区被填满时,每个日志事件都被放置在一个 SQL 语句中并被执行。
  • SMTPAppender:用于在发生特定日志事件时发送电子邮件,通常是错误或致命错误。
  • SocketAppender:用于远程存储。
  • SyslogAppender:它将消息发送到远程 syslog 域。
  • TelnetAppender:它专门用于写入只读套接字。
  • WriterAppender:用于根据用户的选择将日志事件附加到 Writer 或 OutputStream。
  • AsyncAppender: AsyncAppender 允许用户异步记录事件。AsyncAppender 将保存发送给它的事件,然后将它们分派给所有附加到它的 appender。我们可以将多个 appender 附加到 AsyncAppender。
  • JMSAppender:将事件发布到 JMS(Java 消息服务)主题的简单 appender。事件被序列化并作为 JMS 消息类型 ObjectMessage 传输。

另外还要:

  • AppenderSkeleton
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • SocketHubAppender
  • ExternallyRolledFileAppender

 Log4j Appender XML 配置示例

让我们看看常用的 ConsoleAppender 和 RollingFileAppender 类的基于 XML 的配置:

<!-- console appender -->  
<appender name="console" class="org.apache.log4j.ConsoleAppender">  
    <param name="Target" value="System.out" />  
    <layout class="org.apache.log4j.PatternLayout">  
        <param name="ConversionPattern" value="%-5p %c{1} - %m%n" />  
    </layout>  
</appender>  
  
<!-- rolling file appender -->  
<appender name="file" class="org.apache.log4j.RollingFileAppender">  
    <param name="File" value="logs/main.log" />  
    <param name="Append" value="true" />  
    <param name="ImmediateFlush" value="true" />  
    <param name="MaxFileSize" value="10MB" />  
    <param name="MaxBackupIndex" value="5" />  
  
    <layout class="org.apache.log4j.PatternLayout">  
        <param name="ConversionPattern" value="%d %d{Z} [%t] %-5p (%F:%L) - %m%n" />  
    </layout>  
</appender>  

Log4j Appender Properties配置

让我们看一个通过properties属性文件(log4j.properties)添加程序配置的简单示例。功能和上面的xml 的配置一样:

#Define console appender  
log4j.appender.console=org.apache.log4j.ConsoleAppender  
logrj.appender.console.Target=System.out  
log4j.appender.console.layout=org.apache.log4j.PatternLayout  
log4j.appender.console.layout.ConversionPattern=%-5p %c{1} - %m%n  
  
#Define rolling file appender  
log4j.appender.file=org.apache.log4j.RollingFileAppender  
log4j.appender.file.File=logs/main.log  
log4j.appender.file.Append=true  
log4j.appender.file.ImmediateFlush=true  
log4j.appender.file.MaxFileSize=10MB  
log4j.appender.file.MaxBackupIndex=5  
log4j.appender.file.layout=org.apache.log4j.PatternLayout  
log4j.appender.file.layout.ConversionPattern=%d %d{Z} [%t] %-5p (%F:%L) - %m%n