для log4j например:
Конфиг аппендера:
Код:
<appender name="ERROR_APPENDER" class="l2god.log.appenders.TruncateToZipFileAppender">
<param name="file" value="log/java/errors.log"/>
<param name="append" value="false"/>
<param name="backupDir" value="log/backup"/>
<!-- Windows systems doesn't support : char in file names -->
<param name="backupDateFormat" value="yyyy-MM-dd HH-mm-ss"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%p %d{yyyy-MM-dd HH:mm:ss}] %c:%L - %m%n"/>
</layout>
<filter class="l2god.log.filters.ThrowablePresentFilter"/>
</appender>
и собсно сам фильтр
Код:
public class ThrowableAsMessageLogger extends Logger
{
/**
* Creates new instance of this logger
*
* @param name logger's name
*/
protected ThrowableAsMessageLogger(String name)
{
super(name);
}
/**
* This method checks if message is instance of throwbale and throwable is null. If it is so it will move message to
* throwable and set Locationalized message of throwable as message of the log record
*
* @param fqcn fully qualified class name, it would be used to get the line of call
* @param level level of log record
* @param message message of log record
* @param t throwable, if any present
*/
@Override
protected void forcedLog(String fqcn, Priority level, Object message, Throwable t)
{
if (message instanceof Throwable && t == null)
{
t = (Throwable) message;
message = t.getLocalizedMessage();
}
super.forcedLog(fqcn, level, message, t);
}
}