我们有一个 JBoss 服务器,它有 6 个实例,名为 cim_ms1,cim_ms2,...cim_ms6。在java代码中,我们有Log4g.properties,日志文件路径是/home/crm/logs/cim。现在,对于所有6个实例,日志文件都是在home/crm/logs中创建的。但是对于所有 6 个实例,需要在 home/crm/logs/cim_ms1 中为 cim_ms1、home/crm/logs/cim_ms2 为 cim_ms2 等创建日志文件。日志也应该正确进入其各自的日志文件路径。cim_ms1,cim_ms2等是服务器名称。我应该如何在log4g属性中动态获取这些路径?
我假设您想对所有实例使用相同的 log4j2.xml 配置文件。可以使用属性替换来定位单独的日志文件。下面是一个示例配置:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn">
<Properties>
<!-- default to use if system property is not specified -->
<Property name="instance">default_instance</Property>
</Properties>
<Appenders>
<File name="MyFile" fileName="home/crm/logs/${sys:instance}/myapp.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="trace">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
现在,如果为第一个实例指定系统属性-Dinstance=cim_ms1
,为第二个实例指定-Dinstance=cim_ms2
等,则每个实例将记录到单独的日志文件中。
系统属性之外,还可以通过在名为 log4j2.component.properties
的文件中指定上述属性,方法是将此文件包含在应用程序的类路径中。