java - Best way to modify log4j appended for logging -
i'm developing big(functional wise) rest web service , want capture logs good, can have insight of going on where. use log4j logging, using appended setting :
<!-- appenders --> <appender name="console" class="org.apache.log4j.consoleappender"> <param name="target" value="system.out" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%-5p: %c - %m%n" /> </layout> </appender>
which produces these kind of logs :
10:44:55,893 info [stdout] info : my.package.myclass - i'm class message
how can make message i.e.
10:44:55,893 info : my.package.myclass - i'm class message
can make special appender or whatever is, , use in classes not in all, i.e. want have in few of logs :
payload: request parameters
response: response service returns
extra data : data
without having these info [stdout] info my.package.myclass in front of it
update
i forgot mention in question i'm using jboss 5. think jboss might adding 10:44:55,893 info [stdout]
format put in log4j config.
bounty update
i changed :
<!-- ============================== --> <!-- append messages console --> <!-- ============================== --> <appender name="console" class="org.apache.log4j.consoleappender"> <errorhandler class="org.jboss.logging.util.onlyonceerrorhandler"/> <param name="target" value="system.out"/> <param name="threshold" value="info"/> <layout class="org.apache.log4j.patternlayout"> <!-- default pattern: date priority [category] message\n --> <param name="conversionpattern" value="%d{absolute} %-5p [%c{1}] %m%n"/> </layout> </appender>
to this:
<!-- ============================== --> <!-- append messages console --> <!-- ============================== --> <appender name="console" class="org.apache.log4j.consoleappender"> <errorhandler class="org.jboss.logging.util.onlyonceerrorhandler"/> <param name="target" value="system.out"/> <param name="threshold" value="info"/> <layout class="org.apache.log4j.patternlayout"> <!-- default pattern: date priority [category] message\n --> <param name="conversionpattern" value="%m%n"/> </layout> </appender>
and worked, seems kind of ugly this. there other way? i'm using spring mvc/jboss combination.
i'm getting nice clean messages :
10:44:55,893 info : my.package.myclass - i'm class message
without annoying
10:44:55,893 info [stdout]
prefix
question 1:
use following pattern layout appender:
<param name="conversionpattern" value="%d{absolute} %-5p: %c - %m%n" />
the conversion pattern in configuration file stated not result in kind of log stated. example date/time not included in conversion pattern.
question 2:
you can use special logger uses appender logging pure message.
your configuration example following:
<?xml version="1.0" encoding="utf-8" ?> <!doctype log4j:configuration system "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="consoleappender" class="org.apache.log4j.consoleappender"> <param name="target" value="system.out" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%m%n" /> </layout> </appender> <appender name="consoleappender2" class="org.apache.log4j.consoleappender"> <param name="target" value="system.out" /> <layout class="org.apache.log4j.patternlayout"> <param name="conversionpattern" value="%d{absolute} %-5p: %c - %m%n" /> </layout> </appender> <logger name="speciallogger" additivity="false"> <level value="info" /> <appender-ref ref="consoleappender" /> </logger> <root> <priority value="info" /> <appender-ref ref="consoleappender2" /> </root> </log4j:configuration>
you use speciallogger pure messages without additional information. can used in multiple classes.
in configuration of speciallogger, additivity = "false"
needed, because otherwise appender consoleappender2
of root logger log same message. (the message logged 2 times in case.)
your code example this:
public class testclassa { private static logger speciallogger = logger.getlogger("speciallogger"); private static logger logger = logger.getlogger(testclassa.class); public testclassa() { } public void dosomething() { logger.info("some message testclassa"); speciallogger.info("some message via speciallogger testclassa"); } }
calling dosomething results in:
17:17:18,125 info : com.foo.testclassa - message testclassa message via speciallogger testclassa
somewhere in main class need configure log4j usual, e.g.:
domconfigurator.configureandwatch("log4j.xml", 60 * 1000);
Comments
Post a Comment