java - 具有不同日志级别的不同 java 进程的相同 log4j2.xml
问题描述
问题
我想为log4j2.xml
我在不同 linux 服务器上运行的几个 Java 进程标准化我的设置。我的硬条件:log4j2.xml
所有服务器都只有一个。
有时需要在 Java 进程运行时将我的loglevel
from更改为INFO
to 。您可以通过在配置中DEBUG
更改 , 来做到这一点。logLevel
log4j2.xml
monitorInterval
但是,这会更改该loglevel
服务器上运行的所有进程!我需要一个可以更改单个进程的 logLevel 的解决方案。
我的第一次尝试
我以为我会将 logLevel 移动到属性中。假设我有log4j2.xml
(例如):
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Configuration monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %t %-5p %-32c{1} - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="${bundle:logger:logLevel}">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
在此旁边,我logger.properties
在类路径中也有该文件:
logLevel=INFO
现在,当我更改我的log4j2.xml
(通过在某处添加空格)并更新此属性文件时,日志记录会更改。但是,如前所述,它改变了logLevel
所有进程。
我想要的是
我希望能够有一个logger.properties
看起来像这样的:
process1LogLevel=INFO
process2LogLevel=DEBUG
然后在log4j2.xml
动态配置这个属性的东西:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Configuration monitorInterval="30">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %t %-5p %-32c{1} - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="${bundle:logger:<something based on the process name>}">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
然而,这个“灵活”的属性并没有真正起作用。您对解决方案有任何想法吗?
笔记
如果你有一个不同的想法,看起来有点不同但实现了我的目标,那也很好!任何开箱即用的解决方案总是受到赞赏:)
解决方案
找到了。您可以嵌套属性。-Dname=process1
例如,如果您指定,您可以像这样使用它:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Configuration monitorInterval="1">
<Properties>
<Property name="process1">DEBUG</Property>
<Property name="process2">INFO</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %t %-5p %-32c{1} - %m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="${${sys:name}}">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
推荐阅读
- c++ - CoR vs simple if else 和基于矩阵的函数调用,其中链依赖于请求
- python - 在日期时间索引上减去具有不同粒度的数据框列
- google-smart-home - TemperatureSetting 特征模式和“自动”模式的问题
- logstash - 为具有不同结构的文件查找 grok 模式
- json - 如何使用 PL/SQL 循环遍历 json 响应?
- xamarin - 无法加载文件路径中包含特殊字符 (!@#) 的 pdf 文件。Webview Xamarin 表单
- qt - QT 套接字等待用户输入
- java - 如何使用 Java 在 SQL Server 中存储具有精确小数的 DateTime
- python - 处理 .csv 文件:错误:只能将整数标量数组转换为标量索引
- javascript - 错误 [ERR_PACKAGE_PATH_NOT_EXPORTED]:在@babel/helper-compilation-targets/package.json 中没有解决“导出”主要问题