Discussion:
logging only one level of messages
Beth Hechanova
2008-02-02 02:23:57 UTC
Permalink
I have a log file that I would like only "trace" messages written to it.
However when I create my properties file such that the logger specifies
the trace level, I also get the debug, info, etc. messages in that log
file. Is there a way to enforce just trace messages?



My properties file looks like:



log4j.category.com.xxx.businesslogic =trace, lcdlog



log4j.appender.lcdlog=org.apache.log4j.FileAppender

log4j.appender.lcdlog.File=/data/logs/lcd.log

log4j.appender.lcdlog.layout=org.apache.log4j.PatternLayout

log4j.appender.lcdlog.layout.ConversionPattern=[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n



And of course I have another appender to handle the other log messages.



Is it possible to set things up in the properties file to only get the
trace messages?

I'm using log4j 1.2.15 on a linux system.



Thanks,

Beth
James A. N. Stauffer
2008-02-02 03:10:16 UTC
Permalink
With XML config you can use a LevelFilter and put a cap on the level.
Post by Beth Hechanova
I have a log file that I would like only "trace" messages written to it.
However when I create my properties file such that the logger specifies
the trace level, I also get the debug, info, etc. messages in that log
file. Is there a way to enforce just trace messages?
log4j.category.com.xxx.businesslogic =trace, lcdlog
log4j.appender.lcdlog=org.apache.log4j.FileAppender
log4j.appender.lcdlog.File=/data/logs/lcd.log
log4j.appender.lcdlog.layout=org.apache.log4j.PatternLayout
log4j.appender.lcdlog.layout.ConversionPattern=[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n
And of course I have another appender to handle the other log messages.
Is it possible to set things up in the properties file to only get the
trace messages?
I'm using log4j 1.2.15 on a linux system.
Thanks,
Beth
--
James A. N. Stauffer http://www.geocities.com/stauffer_james/
Are you good? Take the test at http://www.livingwaters.com/good/
Beth Hechanova
2008-02-02 22:14:10 UTC
Permalink
I switched my properties file to an xml configuration file and I still
cannot get it to work. I have tried both the LevelMatchFilter and the
LevelRangeFilter.



Below is my current configuration file:

No matter what I try, I seem to either get nothing in the lcd.log file,
or all messages. I only want trace messages.



I changed from a LevelMatchFilter b/c I found someone complaining that
it did not work - that the other levels returned "neutral", so they too
match (and indeed were logged to log file). Then I tried specifying the
rest of the log levels - fatal, error, info, debug with a value of
"false" for AcceptOnMatch. That didn't work either.



There seems to be something fundamentally that I am missing, but I can't
seem to figure it out. What is the trick to using either a
LevelMatchFilter or a LevelRangeFilter?



Thanks,

Beth





<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">



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



<appender name="console" class="org.apache.log4j.ConsoleAppender">

<param name="Target" value="System.out"/>

<param name="Threshold" value="INFO"/>

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

<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p (%-F:%-L) - %m%n"/>

</layout>

</appender>



<appender name="rolling" class="org.apache.log4j.RollingFileAppender">


<param name="File" value="/data/logs/pdlg.log"/>

<param name="Threshold" value="INFO"/>

<param name="MaxFileSize" value="100KB"/>

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

<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p (%-F:%-L) - %m%n"/>

</layout>

</appender>



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

<param name="File" value="/data/logs/errorcache.log"/>

<param name="Threshold" value="ERROR"/>

<layout class="com.xxx.pdlg.businesslogic.logging.PdlgShortLayout"
/>

</appender>



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

<param name="File" value="/data/logs/lcd.log"/>

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

<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n"/>

</layout>

<filter class="org.apache.log4j.varia.LevelRangeFilter">

<param name="LevelMin" value="TRACE"/>

<param name="LevelMax" value="TRACE"/>

<param name="AcceptOnMatch" value="true" />

</filter>

</appender>



<logger name="com.xxx.pdlg" additivity="false">

<appender-ref ref="rolling" />

<appender-ref ref="errorCache" />

<appender-ref ref="lcd" />

</logger>



<root>

<appender-ref ref="console" />

</root>



</log4j:configuration>



-----Original Message-----
From: James A. N. Stauffer [mailto:***@gmail.com]
Sent: Friday, February 01, 2008 7:10 PM
To: Log4J Users List
Subject: Re: logging only one level of messages



With XML config you can use a LevelFilter and put a cap on the level.
Post by Beth Hechanova
I have a log file that I would like only "trace" messages written to it.
However when I create my properties file such that the logger
specifies
Post by Beth Hechanova
the trace level, I also get the debug, info, etc. messages in that log
file. Is there a way to enforce just trace messages?
log4j.category.com.xxx.businesslogic =trace, lcdlog
log4j.appender.lcdlog=org.apache.log4j.FileAppender
log4j.appender.lcdlog.File=/data/logs/lcd.log
log4j.appender.lcdlog.layout=org.apache.log4j.PatternLayout
log4j.appender.lcdlog.layout.ConversionPattern=[%d{MM/dd/yyyy
HH:mm:ss}]
Post by Beth Hechanova
%-p - %m%n
And of course I have another appender to handle the other log
messages.
Post by Beth Hechanova
Is it possible to set things up in the properties file to only get the
trace messages?
I'm using log4j 1.2.15 on a linux system.
Thanks,
Beth
--
James A. N. Stauffer http://www.geocities.com/stauffer_james/

Are you good? Take the test at http://www.livingwaters.com/good/



---------------------------------------------------------------------

To unsubscribe, e-mail: log4j-user-***@logging.apache.org

For additional commands, e-mail: log4j-user-***@logging.apache.org
Curt Arnold
2008-02-03 16:56:59 UTC
Permalink
Post by Beth Hechanova
I switched my properties file to an xml configuration file and I still
cannot get it to work. I have tried both the LevelMatchFilter and the
LevelRangeFilter.
No matter what I try, I seem to either get nothing in the lcd.log file,
or all messages. I only want trace messages.
I changed from a LevelMatchFilter b/c I found someone complaining that
it did not work - that the other levels returned "neutral", so they too
match (and indeed were logged to log file). Then I tried specifying the
rest of the log levels - fatal, error, info, debug with a value of
"false" for AcceptOnMatch. That didn't work either.
There seems to be something fundamentally that I am missing, but I can't
seem to figure it out. What is the trick to using either a
LevelMatchFilter or a LevelRangeFilter?
Thanks,
Beth
You need to throw a DenyAllFilter at the end to reject any logging
events that remained neutral.
...
Post by Beth Hechanova
<appender name="lcd" class="org.apache.log4j.FileAppender">
<param name="File" value="/data/logs/lcd.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="TRACE"/>
<param name="LevelMax" value="TRACE"/>
<param name="AcceptOnMatch" value="true" />
</filter>
+<filter class="org.apache.log4j.filter.DenyAllFilter"/>
Post by Beth Hechanova
</appender>
Beth Hechanova
2008-02-04 19:41:03 UTC
Permalink
I had tried adding a DenyAllFilter at one time and I still didn't get
the behavior I was looking for.

Just to be sure, I tried again today several scenarios:
1) The original scenario, using LevelRangeFilter for just TRACE messages
- no output in lcd.log

2) Same, but add DenyAllFilter as suggested. Again, no output in
lcd.log

3) Change to LevelMatchFilter: LevelToMatch = TRACE; AcceptOnMatch =
true; with DenyAllFilter. Now I get everything BUT TRACE messages in
lcd.log

4) Same as #3, but remove DenyAllFilter. Same result

5) Same as #4: LevelToMatch = TRACE; but change AcceptOnMatch to false.
Same result, everything but TRACE in lcd.log

6) Just to be sure there is nothing specifc to TRACE messages, change
LevelTomatch = INFO, AcceptOnMatch to true; include DenyAllFilter.
Again, I get DEBUG messages into lcd.log (as well as the expected INFO
messages), but no TRACE messages.

Any other ideas on what I have set up incorrectly? Or does this feature
have some problems?

Thanks again,
Beth


-----Original Message-----
From: Curt Arnold [mailto:***@apache.org]
Sent: Sunday, February 03, 2008 8:57 AM
To: Log4J Users List
Subject: Re: logging only one level of messages
Post by Beth Hechanova
I switched my properties file to an xml configuration file and I still
cannot get it to work. I have tried both the LevelMatchFilter and the
LevelRangeFilter.
No matter what I try, I seem to either get nothing in the lcd.log file,
or all messages. I only want trace messages.
I changed from a LevelMatchFilter b/c I found someone complaining that
it did not work - that the other levels returned "neutral", so they too
match (and indeed were logged to log file). Then I tried specifying the
rest of the log levels - fatal, error, info, debug with a value of
"false" for AcceptOnMatch. That didn't work either.
There seems to be something fundamentally that I am missing, but I can't
seem to figure it out. What is the trick to using either a
LevelMatchFilter or a LevelRangeFilter?
Thanks,
Beth
You need to throw a DenyAllFilter at the end to reject any logging
events that remained neutral.
...
Post by Beth Hechanova
<appender name="lcd" class="org.apache.log4j.FileAppender">
<param name="File" value="/data/logs/lcd.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="TRACE"/>
<param name="LevelMax" value="TRACE"/>
<param name="AcceptOnMatch" value="true" />
</filter>
+<filter class="org.apache.log4j.filter.DenyAllFilter"/>
Post by Beth Hechanova
</appender>
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-***@logging.apache.org
For additional commands, e-mail: log4j-user-***@logging.apache.org
Beth Hechanova
2008-02-04 20:44:50 UTC
Permalink
Is there something specific to using the TRACE level logging and the
filters? What I have now is my lcd.log set to deny ERROR and INFO
messages (there are no FATAL or WARN messages logged anywhere) and to
accept DEBUG and TRACE messages. I see debug messages in the lcd.log,
but no trace messages, even though there are places in the application
logging via trace().

For completeness, here is my xml config file: (I have also tried
setting the threshold to TRACE in the lcd.log, but that had no effect).

Beth


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

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

<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out"/>
<param name="Threshold" value="INFO"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p (%-F:%-L) - %m%n"/>
</layout>
</appender>

<appender name="rolling" class="org.apache.log4j.RollingFileAppender">

<param name="File" value="/data/logs/pdlg.log"/>
<param name="Threshold" value="INFO"/>
<param name="MaxFileSize" value="100KB"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p (%-F:%-L) - %m%n"/>
</layout>
</appender>

<appender name="errorCache" class="org.apache.log4j.FileAppender">
<param name="File" value="/data/logs/errorcache.log"/>
<param name="Threshold" value="ERROR"/>
<layout class="com.xxx.pdlg.businesslogic.logging.PdlgShortLayout"
/>
</appender>

<appender name="lcd" class="org.apache.log4j.FileAppender">
<param name="File" value="/data/logs/lcd.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="INFO"/>
<param name="AcceptOnMatch" value="false" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="ERROR"/>
<param name="AcceptOnMatch" value="false" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="DEBUG"/>
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="TRACE"/>
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.filter.DenyAllFilter"/>
</appender>

<logger name="com.xxx.pdlg" additivity="false">
<appender-ref ref="rolling" />
<appender-ref ref="errorCache" />
<appender-ref ref="lcd" />
</logger>

<root>
<appender-ref ref="console" />
</root>

</log4j:configuration>


-----Original Message-----
From: Beth Hechanova [mailto:***@imsconsultants.com]
Sent: Monday, February 04, 2008 11:41 AM
To: Log4J Users List
Subject: RE: logging only one level of messages

I had tried adding a DenyAllFilter at one time and I still didn't get
the behavior I was looking for.

Just to be sure, I tried again today several scenarios:
1) The original scenario, using LevelRangeFilter for just TRACE messages
- no output in lcd.log

2) Same, but add DenyAllFilter as suggested. Again, no output in
lcd.log

3) Change to LevelMatchFilter: LevelToMatch = TRACE; AcceptOnMatch =
true; with DenyAllFilter. Now I get everything BUT TRACE messages in
lcd.log

4) Same as #3, but remove DenyAllFilter. Same result

5) Same as #4: LevelToMatch = TRACE; but change AcceptOnMatch to false.
Same result, everything but TRACE in lcd.log

6) Just to be sure there is nothing specifc to TRACE messages, change
LevelTomatch = INFO, AcceptOnMatch to true; include DenyAllFilter.
Again, I get DEBUG messages into lcd.log (as well as the expected INFO
messages), but no TRACE messages.

Any other ideas on what I have set up incorrectly? Or does this feature
have some problems?

Thanks again,
Beth


-----Original Message-----
From: Curt Arnold [mailto:***@apache.org]
Sent: Sunday, February 03, 2008 8:57 AM
To: Log4J Users List
Subject: Re: logging only one level of messages
Post by Beth Hechanova
I switched my properties file to an xml configuration file and I still
cannot get it to work. I have tried both the LevelMatchFilter and the
LevelRangeFilter.
No matter what I try, I seem to either get nothing in the lcd.log file,
or all messages. I only want trace messages.
I changed from a LevelMatchFilter b/c I found someone complaining that
it did not work - that the other levels returned "neutral", so they too
match (and indeed were logged to log file). Then I tried specifying the
rest of the log levels - fatal, error, info, debug with a value of
"false" for AcceptOnMatch. That didn't work either.
There seems to be something fundamentally that I am missing, but I can't
seem to figure it out. What is the trick to using either a
LevelMatchFilter or a LevelRangeFilter?
Thanks,
Beth
You need to throw a DenyAllFilter at the end to reject any logging
events that remained neutral.
...
Post by Beth Hechanova
<appender name="lcd" class="org.apache.log4j.FileAppender">
<param name="File" value="/data/logs/lcd.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{MM/dd/yyyy HH:mm:ss}]
%-p - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelRangeFilter">
<param name="LevelMin" value="TRACE"/>
<param name="LevelMax" value="TRACE"/>
<param name="AcceptOnMatch" value="true" />
</filter>
+<filter class="org.apache.log4j.filter.DenyAllFilter"/>
Post by Beth Hechanova
</appender>
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-***@logging.apache.org
For additional commands, e-mail: log4j-user-***@logging.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-***@logging.apache.org
For additional commands, e-mail: log4j-user-***@logging.apache.org
Curt Arnold
2008-02-04 21:53:32 UTC
Permalink
Post by Beth Hechanova
Is there something specific to using the TRACE level logging and the
filters? What I have now is my lcd.log set to deny ERROR and INFO
messages (there are no FATAL or WARN messages logged anywhere) and to
accept DEBUG and TRACE messages. I see debug messages in the lcd.log,
but no trace messages, even though there are places in the application
logging via trace().
For completeness, here is my xml config file: (I have also tried
setting the threshold to TRACE in the lcd.log, but that had no
effect).
Beth
Trace was added in log4j 1.2.12 and had some bugs that were fixed in
log4j 1.2.13. Also, commons-logging had trace before log4j and would
just change all commons.logging trace calls to log4j debug calls.
Later versions on commons logging are aware that log4j added trace and
will detect and use it when available.

Loading...