It's possible to use two Loggers in one class.
First idea: get the two loggers with different names:
package com.mycompany.apackage.MyClass;
public class MyClass {
private static final logger = Logger.getLogger(Myclass.class)
private static final dbLogger = Logger.
getLogger(Myclass.class.getName() + ".dblogger")
}
Config for the package of the dbLogger:
<root>
<appender-ref ref="mainlog" />
</root>
<logger name="com.mycompany.apackage.MyClass.dblogger">
<appender-ref ref="dbappender" />
</logger>
(Not tested.)
In that case the dbLogger also logs to the mainlog appender. If it's not appropriate you could use
a custom filter in the mainlog (and other) appenders which filters out the messages of the dbLogger. Another solution is using a completely different prefix for the dbLogger:
private static final logger = Logger.getLogger(Myclass.class)
private static final dbLogger = Logger.
getLogger("dblogger." + Myclass.class.getName())
Log4j config:
<root>
</root>
<logger name="com.mycompany">
<appender-ref ref="mainlog" />
</logger>
<logger name="dblogger.com.mycompany">
<appender-ref ref="dbappender" />
</logger>
Note that if you pass the same parameter to the getLogger() method you will get same Logger object, so you have to use different names.