[logback-user] Custom appender and layout issue

Adam Gordon adam.n.gordon at gmail.com
Wed Nov 9 22:46:30 CET 2011


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 at 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());
>>       sb.append(COLOR_DEFAULT);
>>       return sb.toString();
>>     }
>>
>>     *** snip ***
>>   }
>>
>> Thanks,
>>
>> --adam
>>
>> http://gordonizer.com
>>
>>
>
> --
> Ceki
> http://twitter.com/#!/ceki
> ______________________________**_________________
> Logback-user mailing list
> Logback-user at qos.ch
> http://mailman.qos.ch/mailman/**listinfo/logback-user<http://mailman.qos.ch/mailman/listinfo/logback-user>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.qos.ch/pipermail/logback-user/attachments/20111109/c18d3e3d/attachment.html>


More information about the Logback-user mailing list