gpt4 book ai didi

java - 避免由于 Log4j 中的默认行为而多次记录同一消息

转载 作者:行者123 更新时间:2023-12-01 12:30:46 24 4
gpt4 key购买 nike

我正在 Grails 应用程序中工作,想要在不同的文件中记录消息。我想在不同的文件中记录异常、正常和 API 日志。但根据 Log4j 的一般角色,如果我们将记录器级别设置为“Info”,那么警告和错误消息也将开始记录在该文件中,而我想在不同的文件中记录错误消息。因此,我的错误消息将在错误文件和信息文件中记录两次。虽然我希望“信息”记录器只记录“信息”级别的消息,而不是“错误”级别的消息。而“错误”记录器仅记录错误消息。

下面是我的 Log4j 配置:

log4j = {
def layoutPattern = new PatternLayout("[%d{ISO8601}] %m \r\n")
def dailyRollingInfoFile = new DailyRollingFileAppender(
name:"rollingInfoFileAppender",
layout: layoutPattern,
//Path of the Log File
fileName:"C:\\MS-Logs\\Application\\MSLogs.log",
datePattern: "'.'dd-MM-yyyy")

def dailyRollingExceptionFile = new DailyRollingFileAppender(
name:"rollingExceptionFileAppender",
layout: layoutPattern,
//Path of the Log File
fileName:"C:\\MS-Logs\\Exceptions\\ExceptionLogs.log",
datePattern: "'.'dd-MM-yyyy")

def dailyRollingExceptionAPIFile = new DailyRollingFileAppender(
name:"rollingAPIFileAppender",
layout: layoutPattern,
//Path of the Log File
fileName:"C:\\MS-Logs\\API\\MS-NotificationsLogs.log",
datePattern: "'.'dd-MM-yyyy")

//For logging exceptions stack trace
appenders {
appender dailyRollingInfoFile
appender dailyRollingExceptionFile
appender dailyRollingExceptionAPIFile
}

root {
info 'rollingInfoFileAppender', additivity: false
debug 'rollingAPIFileAppender', additivity: false
error 'rollingExceptionFileAppender'
}
}

现在,这就是我添加过滤器的方式:

dailyRollingExceptionFile.addFilter(new org.apache.log4j.varia.LevelMatchFilter(levelToMatch:'ERROR', acceptOnMatch: true))
dailyRollingExceptionFile.addFilter(new org.apache.log4j.varia.DenyAllFilter())

//To make it sure that It will just Log, Messages by Info Logger
dailyRollingInfoFile.addFilter(new org.apache.log4j.varia.LevelMatchFilter(levelToMatch:'INFO', acceptOnMatch: true))
dailyRollingInfoFile.addFilter(new org.apache.log4j.varia.DenyAllFilter())

//To make it sure that It will just Log, Messages by API Logger
dailyRollingAPIFile.addFilter(new org.apache.log4j.varia.LevelMatchFilter(levelToMatch:'DEBUG', acceptOnMatch: true))
dailyRollingAPIFile.addFilter(new org.apache.log4j.varia.DenyAllFilter())

怎样才能避免相同的消息在不同的文件中被记录两次?我们如何在不同的文件中记录消息而不在其他文件中重复它?

感谢您的宝贵时间:)

最佳答案

我相信 Log4j 的 LevelMatchFilter 可以让您做您想做的事情:

def dailyRollingInfoFile = new DailyRollingFileAppender(...)
dailyRollingInfoFile.addFilter(new org.apache.log4j.varia.LevelMatchFilter(levelToMatch:'INFO', acceptOnMatch: true))
dailyRollingInfoFile.addFilter(new org.apache.log4j.varia.DenyAllFilter())

DenyAllFilter 会删除 LevelMatchFilter 不匹配的消息(即除级别 INFO 之外的所有内容)

关于java - 避免由于 Log4j 中的默认行为而多次记录同一消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25935836/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com