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