我有一个应用程序需要编写两种不同类型的日志:应用程序日志和审计日志。应用程序日志用于调试目的,而审计日志用于记录执行的操作。两个日志都将位于不同的文件中,每个文件应仅包含上述日志(意味着审核日志文件不能包含应用程序日志,反之亦然)。
如何使用log4j实现这一点?
我知道实现这一点的一种方法是在log4j中定义自定义日志级别。还有其他/更好的方法吗?
答案 0 :(得分:4)
我有相同的用例。在log4j.xml中,您可以为每个记录器定义两个不同的记录器和一个appender。举个例子:
<logger name="LOGGER_1" additivity="false">
<appender-ref ref="LOGGER_FILE_1"/>
</logger>
<appender name="LOGGER_FILE_1" class="org.jboss.logging.appender.RollingFileAppender">
<errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
<param name="File" value="${jboss.server.log.dir}/loggerFile1.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="20MB"/>
<param name="MaxBackupIndex" value="5"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
</layout>
</appender>
在您的Java代码中,您可以使用“Logger.getLogger(”LOGGER_1“)”创建一个Logger,它将日志输出写入定义的文件。
答案 1 :(得分:3)
我认为你不需要新的水平。相反,您需要一个特定的Logger(或一组Loggers
)。
通常使用类/包名称实例化它们。但是,出于审计目的,您可以简单地实例化名为“Audit”(或类似)的新Logger
,然后使用标准机制进行适当配置。
答案 2 :(得分:2)
创建Log4j 2.0时支持审计日志记录,这是其主要目的之一。推荐的使用模式是使用Log4j(或SLF4J)的EventLogger,然后使用FlumeAppender,它可以为您的目标日志存储库提供有保证的传递。有关详细信息,请参阅http://logging.apache.org/log4j/2.x/manual/eventlogging.html和http://logging.apache.org/log4j/2.x/manual/appenders.html#FlumeAppender。如果您有其他问题,请随时询问Apache Log4j邮件列表。
答案 3 :(得分:0)
自定义日志级别是一个选项,但我不确定您是否需要它。
您可以定义2个appender:一个用于记录,另一个用于写入审核文件的审核。 然后,您可以创建一个与审计appender连接的记录器,并使用它来报告审计操作,同时使用您通常使用的常规记录器保留所有其他报告。
答案 4 :(得分:0)
Log4J中的appender支持过滤器。 要分离2个文件中的消息,可以使用LevelMatchFilter http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/varia/LevelMatchFilter.html
所以基本上你为2个不同的文件定义了2个appender,每个文件都有适当的过滤器。