On Wed, Nov 9, 2011 at 13:51, ceki
<ceki@qos.ch> wrote:
Although very similar to log4j, logback is different in certain aspects. In particular, logback's OutputStreamAppedner and derived classes (ConsoleAppnder, FileAppender and RollingFileAppender) use an Encoder [1] to write to the output stream. From the looks of it, you should probably write your own encoder.
HTH,
[1]
http://logback.qos.ch/apidocs/ch/qos/logback/core/encoder/Encoder.html
On 09.11.2011 21:29, Adam Gordon wrote:
I'm trying to port my log4j appender and layout over to logback but am
running into some issues. My log4j appender colorizes the timestamp
printed in the logs and the layout colorizes the log messages based on
level - at least, in theory.
I think I've correctly configured everything in the XML but my classes
are not quite correct. I'm getting the colored timestamp and I'm
partially getting the colorized log messages, but am not getting the
pattern I've specified in my XML and the log messages are all smushed
together back to back. I suspect I'm not overriding the right methods
or not calling them in the right order or place.
Here's my appender XML:
<appender name="foouilog" class="com.foo.logging.FooRollingFileAppender">
<file>/usr/local/tomcat/logs/fooui.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily -->
<fileNamePattern>/usr/local/tomcat/logs/fooui-%d{yyyy-MM-dd}.%i.gz</fileNamePattern>
<maxHistory>10</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>25MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.foo.logging.AnsiColorLayout"/>
<pattern>%date{ISO8601} %p [%logger{5}.%method:%line] - %msg%n%rEx</pattern>
</encoder>
</appender>
And here's the relevant Java code:
Appender:
public class FooRollingFileAppender extends
RollingFileAppender<ILoggingEvent> {
*** snip ***
public void append(ILoggingEvent eventObject) {
OutputStream os = this.getOutputStream();
// code to write out color formatted timestamp
os.flush();
super.append(eventObject);
}
*** snip ***
}
Layout:
public class AnsiColorLayout extends LayoutBase<ILoggingEvent> {
*** snip ***
public String doLayout(ILoggingEvent event) {
return this.format(event);
}
private String format(ILoggingEvent event) {
StringBuilder sb = new StringBuilder();
switch (event.getLevel().toInt()) {
*** snip ***
}
sb.append(event.getFormattedMessage());
sb.append(COLOR_DEFAULT);
return sb.toString();
}
*** snip ***
}
Thanks,
--adam
http://gordonizer.com
--
Ceki
http://twitter.com/#!/ceki
_______________________________________________
Logback-user mailing list
Logback-user@qos.ch
http://mailman.qos.ch/mailman/listinfo/logback-user