java - 使用 Log4j 在不同日志中记录不同级别的消息

标签 java log4j

我想使用 apache Log4j.jar 在我的 Web 应用程序中维护两个日志文件:

1) 一个日志将包含每一级别的所有日志消息 2)第二个日志文件将包含特定类别的日志消息

这是我正在使用的配置 XML:(不太了解 XML 中使用的标签,只是尝试一下)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

<appender name="FILE1" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="D:/CSVExportLogs/CSVExportLogFile-ERROR.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c (%F:%L) - %m%n"/>
</layout>
</appender>

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="D:/CSVExportLogs/CSVExportLogFile-INFO.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<param name="Append" value="true"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c (%F:%L) - %m%n"/>
</layout>
</appender>


<category name="com.taxware.mgmt.CustomerManager" additivity="false">
<priority value="warn"/>
<appender-ref ref="FILE"/>
</category>

<root>
<priority value="info"/>
<appender-ref ref="FILE1"/>
</root>
</log4j:configuration>

通过上面的 xml,我只在 FILE1 中获取信息消息,我想要所有级别的消息以及警告级别的消息,这些消息将出现在该文件的单独文件中。有没有可用的解决方案。

最佳答案

# Create ROOT logger(main logger) with level INFO, and add to it 2 appenders:
# FILE_INFO, FILE_WARN. This means that all loggers by default will writes messages
# in this 2 file appenders, with level INFO or higher
log4j.rootLogger=INFO, FILE_INFO, FILE_WARN

######## LEVELS:
# Set logging level to WARN for all classes and subclasses in package 
# com.taxware.mgmt.CustomerManager
log4j.category.com.taxware.mgmt.CustomerManager=WARN

######## APPENDERS:

# FILE_INFO
# Type of appender
log4j.appender.FILE_INFO=org.apache.log4j.RollingFileAppender
# File where to save all messages
log4j.appender.FILE_INFO.File=D:/CSVExportLogs/CSVExportLogFile-INFO.log
# Max file size, after that will be created new log file, and old file will be renamed
log4j.appender.FILE_INFO.MaxFileSize=100KB
# Maximum amount of old log files.
log4j.appender.FILE_INFO.MaxBackupIndex=100
# Patter of messages.
log4j.appender.FILE_INFO.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE_INFO.layout.ConversionPattern=%d{ISO8601} [%-5p][%-24.24t][%32.32c] - %m%n
# Custom level for appender. In this file will be add only messages with level INFO or highter
log4j.appender.FILE_INFO.Threshold=INFO

# FILE_WARN file appender
log4j.appender.FILE_WARN=org.apache.log4j.RollingFileAppender
log4j.appender.FILE_WARN.File=D:/CSVExportLogs/CSVExportLogFile-WARN.log
log4j.appender.FILE_WARN.MaxFileSize=50KB
log4j.appender.FILE_WARN.MaxBackupIndex=10
log4j.appender.FILE_WARN.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE_WARN.layout.ConversionPattern=%d{ISO8601} [%-5p][%-24.24t][%32.32c] - %m%n
# Custom level for appender. In this file will be add only messages with level WARN or highter
log4j.appender.FILE_WARN.Threshold=WARN

关于java - 使用 Log4j 在不同日志中记录不同级别的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9173020/

相关文章:

java - 在为 Android 编程时,如何获得几乎所有英语单词的列表?

Java 类对客户端的理想职责

postgresql - 为什么 mule 应用程序不会为 log4j 加载 postgres 驱动程序类?

java - 如何为 100 个类创建一个记录器

java - 页面上有两个字符集标签,该采用哪个?

java - 在给定的字符串日期中获取该月的最后一天

java - Servlet 应用程序中没有加载任何属性文件

java - Log4j-SMTPAppender NoSuchProviderException smtp

java - Web 服务和 Log4J 输出到文件

Java:无法读取我的项目目录中的文件?