log4j Filter Drolliges Verhalten

takidoso

Erfahrenes Mitglied
Hallo und Halli,
irgendwie ist es sehr merkwürdig und ich bin mit meinem Latein zumindest kurzzeitig am Ende.
Ich möchte verschiedene log-Level auf verschiedene Dateien aufteilen. Dazu hatte ich in einem Tutorial auch den entsprechenden Ansatz gefunden nämlich über Filter.
Hier das Beispiel aus dem Tutorial
Code:
Separate Dateien
Ich möchte DEBUG Meldungen in eine eigene Datei schreiben und alle anderen Meldungen in eine andere. Das können wir nur mit XML machen, da wir einen LevelRange-Filter benötigen.

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
	<appender name="file"
		class="org.apache.log4j.RollingFileAppender">
		<param name="maxFileSize" value="100KB" />
		<param name="maxBackupIndex" value="5" />
		<param name="File" value="test.log" />
		<param name="threshold" value="info" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
		</layout>
	</appender>
	<appender name="debugfile"
		class="org.apache.log4j.RollingFileAppender">
		<param name="maxFileSize" value="100KB" />
		<param name="maxBackupIndex" value="5" />
		<param name="File" value="debug.log" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n" />
		</layout>
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="debug" />
			<param name="LevelMax" value="debug" />
		</filter>
	</appender>

	<root>
		<priority value="debug"></priority>
		<appender-ref ref="debugfile" />
		<appender-ref ref="file" />
	</root>
</log4j:configuration>

Und hier das was ich mache, schaut eigetnlich ziemlich genauso aus
Code:
<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> 
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 
<appender name="gfcApp" class="org.apache.log4j.DailyRollingFileAppender"> 
        <param name="datePattern" value="'.'yyyy-MM-dd" /> 
        <param name="file" value="logs/${user.name}/gfc.log" /> 
        <param name="Append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" 
                        value="%d{ISO8601} %-5p [%t] %c: %m%n" /> 
        </layout> 
</appender> 


<appender name="fdAppErr" class="org.apache.log4j.DailyRollingFileAppender"> 
        <param name="datePattern" value="'.'yyyy-MM-dd" /> 
        <param name="file" value="logs/${user.name}/filedemon.error" /> 
        <param name="Append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" 
                        value="%d{ISO8601} %-5p [%t] %c: %m%n" /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="fatal" />
            <param name="LevelMax" value="warn" />
        </filter>
</appender>


<appender name="fdAppLog" class="org.apache.log4j.DailyRollingFileAppender"> 
        <param name="datePattern" value="'.'yyyy-MM-dd" /> 
        <param name="file" value="logs/${user.name}/filedemon.log" /> 
        <param name="Append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" 
                        value="%d{ISO8601} %-5p [%t] %c: %m%n" /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="warn" />
            <param name="LevelMax" value="info" />
        </filter>
</appender>

<appender name="fdAppTrace" class="org.apache.log4j.DailyRollingFileAppender"> 
        <param name="datePattern" value="'.'yyyy-MM-dd" /> 
        <param name="file" value="logs/${user.name}/filedemon.trace" /> 
        <param name="Append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" 
                        value="%d{ISO8601} %-5p [%t] %c: %m%n" /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="trace" />
        </filter>
</appender>


<category name="de.equens.filedemon"> 
        <priority value="DEBUG" ></priority> 
        <appender-ref ref="fdAppErr" />
</category>

<category name="de.equens.filedemon"> 
        <priority value="DEBUG" ></priority> 
        <appender-ref ref="fdAppLog" />
</category>

<category name="de.equens.filedemon"> 
        <priority value="DEBUG" ></priority> 
        <appender-ref ref="fdAppTrace" />
</category>

</log4j:configuration>
Alternativ hatte ich die die category-tags auch zusammengefasst
Code:
...
<category name="de.equens.filedemon"> 
        <priority value="DEBUG" ></priority> 
        <appender-ref ref="fdAppErr" />
        <appender-ref ref="fdAppLog" />
        <appender-ref ref="fdAppTrace" />
</category>
...

Leider stelle ich fest, dass seitdem ich die Filter eingebaut habe, keine Dateien mehr erzeugt sondern alles auf Konsole geschrieben wird.

Irgendwie kann ich aber nicht glauben das ein solcher Bug in log4j existiert und gehe eher auf ein eigens gebautes Problem aus. Frage mich aber wirklich was ich so anders mache als in dem Tutorial-Beispiel.

Für Hinweise und Ideen wie ich der Lage Herr werde bin ich mordsmäßig dankbar

Takidoso
 
Nach vielen elustren Tests habe ich endlich herausgefunden warum mein Zeug nichts logt.
Es liegt an LevelMin und LevelMax der jeweiligen Filter. Irgendwie habe ich diese Parameter genau andersherum interpretiert.
wenn man also

Code:
<appender name="fdAppErr" class="org.apache.log4j.DailyRollingFileAppender"> 
        <param name="datePattern" value="'.'yyyy-MM-dd" /> 
        <param name="file" value="logs/${user.name}/filedemon.error" /> 
        <param name="Append" value="true" /> 
        <layout class="org.apache.log4j.PatternLayout"> 
                <param name="ConversionPattern" 
                        value="%d{ISO8601} %-5p [%t] %c: %m%n" /> 
        </layout> 
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="warn" />
            <param name="LevelMax" value="fatal" />
        </filter>
</appender>

anstelle andersherum wi im ersten Versuch schreibt dann funktioniert es auch wie man das annehmen darf.

Wieder was neues gelernt :-)
 
Zurück