[logback-user] Custom appender and layout issue

ceki ceki at qos.ch
Wed Nov 9 23:17:23 CET 2011


You should look at what LayoutWrappingEncoder and try to adapt that for 
your use case. It's just a guess though.

-- 
Ceki
http://twitter.com/#!/ceki

On 09.11.2011 22:46, Adam Gordon wrote:
> 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 <mailto: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
>
>


More information about the Logback-user mailing list