[logback-user] Custom appender and layout issue
ceki
ceki at qos.ch
Wed Nov 9 21:51:22 CET 2011
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
More information about the Logback-user
mailing list