如何使用 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 将自定义级别记录到文件中?的主要内容,如果未能解决你的问题,请参考以下文章
如何将自定义 jar 文件添加/复制到 Kafka MirrorMaker 中?
在 Spring Boot 应用程序中未针对休眠和弹簧过滤 Log4j2 日志级别