Log4j Appenders
Log4j Appenders
Log4j 提供 Appender 对象,主要负责将日志消息打印到不同的目的地,例如控制台、文件、NT 事件日志、Swing 组件、JMS、远程 UNIX 系统日志守护进程、套接字等。
每个 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: 两者都是使用最广泛的附加程序,提供将日志写入文件的支持。
JDBCAppender: JDBCAppender 用于将日志事件发送到数据库。每个 append 调用都会添加到一个 ArrayList 缓冲区。当缓冲区被填满时,每个日志事件都被放置在一个 SQL 语句中并被执行。
SMTPAppender: 它用于在发生特定日志记录事件时发送电子邮件,通常是错误或致命错误。
SocketAppender: 用于远程存储。
SyslogAppender: 它将消息发送到远程系统日志域。
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 属性配置
让我们看一个简单的例子,通过属性文件(log4j.properties)显示appender 配置。它定义了上述基于 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