[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