首页 > 解决方案 > 为多个包配置 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

标签: log4j2

解决方案


首先,您的配置对我来说似乎无效。你有

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>

推荐阅读