log4j2 - 为多个包配置 Log4j2
问题描述
这是我的属性文件。我在这里定义了 2 个包。我想要整个应用程序中的记录器。如果我的应用程序中有 10-12 个包怎么办。这是唯一的方法吗?
name=PropertiesConfig
property.filename =/myfolder
appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{dd MMM yyyy HH:mm:ss} [%-5p] [%c] [%M] %x - %m%n
appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=${filename}/logs.txt
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=%d{dd MMM yyyy HH:mm:ss} [%-5p] [%c] [%M] %x - %m%n
loggers=file,myfile
logger.file.name=servlets
logger.file.level = debug,info
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = LOGFILE
logger.myfile.name=com.util
logger.myfile.level = debug,info
logger.myfile.appenderRefs = file
logger.myfile.appenderRef.myfile.ref = LOGFILE
rootLogger.level =com.debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
解决方案
首先,您的配置对我来说似乎无效。你有
logger.myfile.name=com.util
logger.myfile.level = debug,info
logger.myfile.appenderRefs = file
logger.myfile.appenderRef.myfile.ref = LOGFILE
rootLogger.level =com.debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
您不能在 logger.myfile.level 上指定 2 个级别。指定调试将包括所有调试、信息、警告、错误和致命事件。
其次,你有 rootLogger.level = com.debug。我认为这应该是rootLogger.level=debug
?
要回答您的问题,是的,您必须为要匹配的每个模式配置一个记录器。但是,Logger 声明可以将其一些配置委托给其父级。通常唯一需要的是 level 属性。
所以你可以指定:
logger.a.name=com.util.marketing.sub1
logger.a.level=debug
logger.b.name=com.util.marketing.sub2
logger.b.level=error
logger.c.name=com.util.marketing
logger.c.level=info
logger.c.appenderRefs=file
logger.c.appenderRef.file=LOGFILE
就个人而言,我更喜欢 XML,因为我发现它更简洁明了。以上将是
<Logger name="com.util.marketing.sub1" level="DEBUG"/>
<Logger name="com.util.marketing.sub2" level="ERROR"/>
<Logger name="com.util.marketing" level="INFO">
<AppenderRef ref="LOGFILE"/>
</Logger>
推荐阅读
- javascript - 如何在 React ^16.8.0(使用 Hook 的函数组件)中使用 jQuery?
- jstl - 当条件为假时,为什么 c:if 条件返回结果?
- javascript - 调用 Array.prototype.slice.apply(arguments) 时结果不同
- android - 无法使用 Firebase UI 在 Recyclerview 之间放置广告以获取 Firestore 数据
- oauth-2.0 - 无法从 azure v2 令牌端点获取 given_name 和 family_name
- mysql - 使用 docker-compose 同时运行 2 个 docker mysql 容器
- tink - 我可以使用 Google Tink 解密 Keyczar 加密的数据吗?
- c# - c# data annotations 验证模型,脱离上下文绑定
- python - 安装 wheel 和 httplib2 库后,我无法在代码中导入 httplib2
- javascript - 检查类不返回真