如何使用 Log4J2 将自定义级别记录到文件中?

Posted

技术标签:

【中文标题】如何使用 Log4J2 将自定义级别记录到文件中?【英文标题】:How to log custom level with Log4J2 to file? 【发布时间】:2017-08-21 00:44:23 【问题描述】:

我有以下属性配置文件:

name=ACME_CRM
property.filename=log
appenders=console,file

appender.console.type=Console
appender.console.name=STDOUT
appender.console.layout.type=PatternLayout
appender.console.layout.pattern=[%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n

appender.file.type=File
appender.file.name=LOGFILE
appender.file.fileName=target/$filename.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %dyyyy-MM-dd HH:mm:ss.SSS [%t] %c1 - %msg%n

loggers=file
logger.file.name=LOGIN
logger.file.level=401
logger.file.appenderRefs=file
logger.file.appenderRef.file.ref=LOGFILE

rootLogger.level=debug
rootLogger.appenderRefs=stdout
rootLogger.appenderRef.stdout.ref=STDOUT

在我的代码中:

logger.log(Level.forName("LOGIN", 401), userName);

但是,当我跟踪我的日志文件时,什么也没有出现。我究竟做错了什么?我尝试用 LOGIN 替换级别,但没有任何反应。我可以改变什么?

【问题讨论】:

【参考方案1】:

首先,在logger之前定义自定义级别

static Level level = Level.forName("LOGIN", 401);
static Logger logger = LogManager.getLogger();

其次,将对应的行改成如下:

logger.file.name=YOUR_PACKAGE_NAME
logger.file.level=LOGIN

【讨论】:

包名必须准确还是可以是父包?例如。 package.group 而不是 package.group.name 可以,可以是父包。 我只有 1 个问题,我在控制台中看不到调试...你知道这是为什么吗? 我猜这些调试日志位于您指定的文件记录器包中,并被它过滤。

以上是关于如何使用 Log4J2 将自定义级别记录到文件中?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置log4j2日志记录至数据库

如何将自定义轮文件安装到天蓝色函数中?

如何将自定义 jar 文件添加/复制到 Kafka MirrorMaker 中?

在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别

如何将自定义属性添加到 Symfony Doctrine YAML 映射文件

log4j2配置ThresholdFilter,让info文件记录error日志