如何使用log4j将错误和信息消息分别记录到syslog中? [英] How to log error and info messages separately into syslog with log4j?

查看:128
本文介绍了如何使用log4j将错误和信息消息分别记录到syslog中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

log4j.properties:

log4j.properties:

# configure the root logger
log4j.rootLogger=INFO, SYSLOG

# configure Syslog facility LOCAL6 appender
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.threshold=INFO
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.facility=LOCAL6
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern="MyApp: %d\{ISO8601\}%m\n"

记录器类

import org.apache.log4j.Logger;

public class Log4jAuditLogger {
    private static Logger LOG = Logger.getLogger(Log4jAuditLogger.class);

    public static void log(String message) {
        LOG.info(message);
    }
}

我想将信息(这些是审核消息,我不想在这里记录错误消息)消息记录到SYSLOG LOCAL6中,并将错误消息(这些是Java程序的内部错误消息)记录到SYSLOG LOCAL7中.

I want to log info (these are audit messages, i don't want to log error messages here) messages into SYSLOG LOCAL6, and to log error messages(these are internal error messages of the java program) into SYSLOG LOCAL7.

我应该如何扩展此类和配置文件来做到这一点?

How should I extend this class and configuration file to do this?

我使用log4j 1.2.

I use log4j 1.2.

推荐答案

将另一个附加程序添加到您的log4j.properties中:

Add to your log4j.properties another appender:

# configure the root logger
log4j.rootLogger=INFO, SYSLOG, SYSLOG7

# configure Syslog facility LOCAL6 appender
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.threshold=INFO
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.facility=LOCAL6
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern="MyApp: %d\{ISO8601\}%m\n"

# configure Syslog facility LOCAL7 appender
log4j.appender.SYSLOG7=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG7.threshold=ERROR
#                                  vv change to whatever the host is
log4j.appender.SYSLOG7.syslogHost=localhost 
log4j.appender.SYSLOG7.facility=LOCAL7
log4j.appender.SYSLOG7.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG7.layout.conversionPattern="MyApp: %d\{ISO8601\}%m\n"

编辑评论:

如果SYSLOG7仅记录ERROR(或更高):将阈值设置为ERROR级别.较低级别的所有日志记录都不会显示.

If SYSLOG7 shall only log ERROR (and higher): set the threshold to ERROR level. All messages logged with a lower level won't show.

棘手的部分是在Syslog中仅显示低级别:

Tricky part is to show only low levels in Syslog:

您可以使用过滤器仅记录比例如"低的消息. ERROR级别.

You can use a filter to log only messages "lower" than e.g. ERROR level.

在log4j 2中:PropertyConfigurator不支持该过滤器.因此,您必须更改为XML配置才能使用它.有关过滤器的信息,请参见 log4j-Wiki

In log4j 2 : The filter is not supported by PropertyConfigurator. So you must change to XML config to use it. See log4j-Wiki about filters.

特定级别"示例

<appender name="info-out" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="info.log"/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%m%n"/> 
            </layout> 
            <filter class="org.apache.log4j.varia.LevelMatchFilter">
                    <param name="LevelToMatch" value="info" />
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
            <filter class="org.apache.log4j.varia.DenyAllFilter" />
</appender> 

或级别范围"

<appender name="info-out" class="org.apache.log4j.FileAppender"> 
            <param name="File" value="info.log"/> 
            <layout class="org.apache.log4j.PatternLayout"> 
                    <param name="ConversionPattern" value="%m%n"/> 
            </layout> 
            <filter class="org.apache.log4j.varia.LevelRangeFilter">
                    <param name="LevelMax" value="info"/>
                    <param name="LevelMin" value="info"/>
                    <param name="AcceptOnMatch" value="true"/>
            </filter>
</appender>

这篇关于如何使用log4j将错误和信息消息分别记录到syslog中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆