I have an XML configuration file with multiple appenders. Each of the
appender has a variable associated with it.

 

I realize that all the variables have to be set before calling the
DOMConfigurator. Without initializing all the variables, I get the following
error.

 

 

log4j:ERROR setFile(null,false) call failed.

java.io.FileNotFoundException:  (No such file or directory)

      at java.io.FileOutputStream.open(Native Method)

      at java.io.FileOutputStream.<init>(FileOutputStream.java:179)

      at java.io.FileOutputStream.<init>(FileOutputStream.java:102)

      at org.apache.log4j.FileAppender.setFile(FileAppender.java:272)

      at
org.apache.log4j.FileAppender.activateOptions(FileAppender.java:151)

      at
org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:247)

      at
org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:210)

      at
org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java
:140)

      at
org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator
.java:153)

      at
org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigu
rator.java:415)

      at
org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:335)

      at
org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:788)

      at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:673)

      at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:616)

      at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:584)

      at
org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:694)

      at
com.chordiant.taskeng.server.core.TaskLogger.init(TaskLogger.java:44)

      at
com.chordiant.taskeng.server.core.TaskLogger.main(TaskLogger.java:135)

 

 

 

 

This is not viable in my case, since, different programs use the same
configuration file to dynamically set the file name at *different* times.
For eg, when prg1 initializes and starts logging, appender_01 variable is
set and since prg 2 which uses appender_02 has not yet started the variable
2 is not yet initialized. 

 

What's a way around this issue using a single configuration file?

 

 

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/";>

        

  <appender name="appender_01" class="org.apache.log4j.FileAppender">

    <param name="File" value="${TaskServer.log}"/>

    <param name="Append" value="false"/>

    <layout class="org.apache.log4j.PatternLayout">

      <param name="ConversionPattern" value="[%p] %r %C %d{ISO8601} %l %m
%n"/>

    </layout>

  </appender> 

  

  <appender name="="appender_02" class="org.apache.log4j.FileAppender">

     <param name="File" value="${TaskServerHelper.log}"/>

    <param name="Append" value="false"/>

    <layout class="org.apache.log4j.PatternLayout">

      <param name="ConversionPattern" value="[%p] %r %C %d{ISO8601} %l %m
%n"/>

    </layout>

  </appender>

  

<logger name="logger1">                

                 <appender-ref ref=" appender_01"/>

  </logger>

  

  <logger name="logger2">              

                 <appender-ref ref=" appender_02"/>

  </logger>

  </log4j:configuration>

 

Thanks,

Deepa.

 

 

Reply via email to