Jdbc 在log4j2中打印intLevel
您可以在与内置log4j2日志记录级别对应的数值中看到,例如INFO->400。如何在patternlayout resp中引用它。在JDBC记录器配置中 我有一个JDBC的旧log4j1.x配置,它被称为%iprio 解决方法是使用 级别{OFF=0,FATAL=100,ERROR=200,WARN=300,INFO=400,DEBUG=500,TRACE=600,ALL=1000}Jdbc 在log4j2中打印intLevel,jdbc,log4j2,pattern-layout,Jdbc,Log4j2,Pattern Layout,您可以在与内置log4j2日志记录级别对应的数值中看到,例如INFO->400。如何在patternlayout resp中引用它。在JDBC记录器配置中 我有一个JDBC的旧log4j1.x配置,它被称为%iprio 解决方法是使用 级别{OFF=0,FATAL=100,ERROR=200,WARN=300,INFO=400,DEBUG=500,TRACE=600,ALL=1000} 但是我对此不太满意。听起来您想记录日志级别的整数值,而不是名称,而且您不想使用PatternLayout的le
但是我对此不太满意。听起来您想记录日志级别的整数值,而不是名称,而且您不想使用
PatternLayout
的level
参数的标签功能
一种可能的解决方案是创建一个,下面是一些示例代码:
package example;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.lookup.StrLookup;
@Plugin(name = "level", category = "Lookup")
public class LevelLookup implements StrLookup{
/**
* Lookup the value for the key.
* @param key the key to be looked up, may be null
* @return The value for the key.
*/
public String lookup(String key) {
return null;
}
/**
* Lookup the value for the key using the data in the LogEvent.
* @param event The current LogEvent.
* @param key the key to be looked up, may be null
* @return The value associated with the key.
*/
public String lookup(LogEvent event, String key) {
return String.valueOf(event.getLevel().intLevel());
}
}
接下来,这里是一个使用新查找的示例配置-注意${level:}
:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] ${level:} %logger{36} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
最后是输出:
22:49:29.438 [main] 500 example.SomeClass - This is some debug!
22:49:29.440 [main] 400 example.SomeClass - Here's some info!
22:49:29.440 [main] 200 example.SomeClass - Some erorr happened!
希望这有帮助 谢谢,这与一个附加补充一起工作:log4j不会处理@Plugin注释,除非在配置标签的packages属性中明确告诉他:packages=“example”。我还应该提到的是,根据法律,我们不允许使用camelcased查找名称。我想使用${intLevel:},但它不起作用。很高兴这对您有用。请注意,log4j2应该在构建过程中自动创建“序列化插件列表文件”,除非您已禁用此功能。此外,我不知道在命名除唯一性以外的查找时有任何命名限制。在示例代码中将查找名称“level”替换为“intLevel”时,效果很好。也许这是旧版本log4j2中的一个bug,因为您链接的问题是OP使用的是2.2和2.3
22:49:29.438 [main] 500 example.SomeClass - This is some debug!
22:49:29.440 [main] 400 example.SomeClass - Here's some info!
22:49:29.440 [main] 200 example.SomeClass - Some erorr happened!