Log4j属性文件动态路径设置

时间:2017-01-24 12:22:41

标签: logging jboss log4j log4j2

我们有一个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属性中动态获取这些路径?

1 个答案:

答案 0 :(得分:1)

我假设您要为所有实例使用相同的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的文件中指定上述属性,而不是系统属性。