I am trying to create custom layout in Logback, using the link,
http://stackoverflow.com/questions/14168684/creating-a-custom-layout-in-logback
and i am successful in creating log file.
The problem is when I apply "pattern" tag in encoder tag of logback.xml like this,
Logback.xml
==========
<appender name="appLogFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>C:/tmp.log</fileNamePattern>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern>
<layout class="com.dces.util.LoggingConsoleLayout" />
</encoder>
</appender>
it is not applied on log file, which is created, and I am getting content without date&time AS BELOW.
-- [ERROR]main.java.com.srccodes.log.LogbackHello - Welcome to the HelloWorld example of Logback.
-- [ERROR]main.java.com.srccodes.log.LogbackHello - Dummy error message.
Actually if I remove class="ch.qos.logback.core.encoder.LayoutWrappingEncoder" in encoder tag ,pattern is working, but then my custom layout is not working.
I want to apply pattern tag as well as custom layout tag on encoder tag.Is it is possible?
LoggingConsoleLayout.xml - My Cuatom Layout
=====================================
public class LoggingConsoleLayout extends LayoutBase<ILoggingEvent>{
@Override
public String doLayout(ILoggingEvent event) {
StringBuffer sbuf = null;
try
{
sbuf = new StringBuffer(128);
sbuf.append("-- ");
sbuf.append("[");
sbuf.append(event.getLevel());
sbuf.append("]");
sbuf.append(event.getLoggerName());
sbuf.append(" - ");
sbuf.append(encodeData(event.getFormattedMessage()));
//here i am encoding my log messages and which is important for me
sbuf.append(CoreConstants.LINE_SEPARATOR);
}
catch(Exception e)
{
e.printStackTrace();
}
return sbuf.toString();
}
}
when I tried this,
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="com.dces.util.LoggingConsoleLayout" >
<Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</encoder>
I got ERROR in ch.qos.logback.core.joran.spi.Interpreter@17:17 - no applicable action for [Pattern], current ElementPath is [[configuration][appender][encoder][layout][Pattern]]
And my pattern is not applied to my layout...
Is there is any possibility to have both layout and pattern tags in encoder tag?