log4cxx:使用参数配置appender

时间:2011-03-30 13:50:12

标签: log4j log4cxx

log4cxx的配置从后续的xml中读取:

DOMConfigurator::configure("log4cxx.xml");

但是,想要在运行时设置文件名,这会产生一个问题,即要么有多个.xmls用于读取,要么在运行中创建一个(在内存中/磁盘上 - 无论在哪里)。

  <appender name="appxNormalAppender" class="org.apache.log4j.FileAppender">
    <param name="file" value="appxLogFile.log" />
    <param name="append" value="true" />
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d %-5p [%t:%x] %C{2} (%F:%L) - %m%n" />
    </layout>
  </appender>

有没有办法在配置和更改配置文件后,将配置程序的某些值传递给<param file="file" value="%%value%%" />或访问该属性?

P.S。这样做的原因:同一程序的多个副本正在写入相同的日志,使其看起来像..范围。如何以传统方式使用log4j / log4cxx避免这种情况而不会发明过多的自行车?

1 个答案:

答案 0 :(得分:0)

大约两年前,这个问题袭击了我;我不再能访问源代码,但这就是我所做的,或多或少:

  1. 扩展FileAppender并在配置文件中使用它。
  2. setFile()方法中,我将流程名称和ID附加到文件名(如果您不使用滚动文件,则可以在setOption()方法中执行此操作。
  3. 我们已经有了一种通过内部ID唯一识别我们的流程及其实例的机制;例如,您可以使用PID,或者添加一个全局变量,并使用log4cxx将其设置为每个应用程序中的唯一值,然后在您的appender的setOption方法中使用它。

    另见我的回答:Using Log4j CompositeTriggeringPolicy feature with log4CXX