Ahhhhhh. Thanks. I will try that. Which encoder should I extend -
LayoutWrapping or PatternLayout? I noticed that OutputStreamAppenders
use LayoutWrappingEncoder. Or should I roll my own from scratch?
--adam
http://gordonizer.com
On Wed, Nov 9, 2011 at 13:51, ceki <
ceki@qos.ch <mailto:
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
<
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>
<__timeBasedFileNamingAndTriggeri__ngPolicy
class="ch.qos.logback.core.__rolling.SizeAndTimeBasedFNATP"__>
<maxFileSize>25MB</__maxFileSize>
</__timeBasedFileNamingAndTriggeri__ngPolicy>
</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());