2013-01-05 3 views
7

내가 logback에서 사용자 지정 레이아웃을 만들려고하고 있어요에서 사용자 지정 레이아웃을 생성은 Logback

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <!-- <pattern> %-5level [%logger{0}] - %msg%n </pattern> --> 
     <layout class="com.dces.util.LoggingConsoleLayout" /> 
    </encoder> 
</appender> 

<root level="trace"> 
    <appender-ref ref="STDOUT" /> 
</root> 
</configuration> 

내가 로거를 만들려고 할 때 다음과 같은 그러나, 나는 다음과 같은 오류가 발생합니다 : 여기

public class Main { 
    private static Logger logger = (Logger)LoggerFactory.getLogger(Main.class); 
    public static void main(String [] args) 
    { 
     logger.info("Testing"); 
    } 
} 

가 어입니다 ROR 메시지 내가 얻을 :

05:40:11,519 |-ERROR in [email protected] - Could not invoke method setLayout in class ch.qos.logback.classic.encoder.PatternLayoutEncoder with parameter of type com.dces.util.LoggingConsoleLayout java.lang.reflect.InvocationTargetException 
at java.lang.reflect.InvocationTargetException 
at at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at at java.lang.reflect.Method.invoke(Unknown Source) 
at at ch.qos.logback.core.joran.util.PropertySetter.invokeMethodWithSingleParameterOnThisObject(PropertySetter.java:293) 
at at ch.qos.logback.core.joran.util.PropertySetter.setComplexProperty(PropertySetter.java:356) 
at at ch.qos.logback.core.joran.action.NestedComplexPropertyIA.end(NestedComplexPropertyIA.java:179) 
at at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:318) 
at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:197) 
at at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:183) 
at at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62) 
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:157) 
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:143) 
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:106) 
at at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:56) 
at at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75) 
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:148) 
at at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85) 
at at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55) 
at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:128) 
at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:107) 
at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:295) 
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:269) 
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281) 
at at com.dces.Main.<clinit>(Main.java:8) 
Caused by: java.lang.UnsupportedOperationException: one cannot set the layout of ch.qos.logback.classic.encoder.PatternLayoutEncoder 
at at ch.qos.logback.core.pattern.PatternLayoutEncoderBase.setLayout(PatternLayoutEncoderBase.java:64) 
at ... 25 common frames omitted 
05:40:11,538 |-ERROR in ch.qos.logback.classic.PatternLayout("null") - Empty or null pattern. 

답변

14

기본 인코더 PatternLayoutEncoderBase의 서브 클래스입니다 PatternLayoutEncoder이다.

<encoder> 
    <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> 
<encoder> 

대신

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"> 
     <layout class="com.dces.util.LoggingConsoleLayout" /> 
    </encoder> 
LayoutWrappingEncoder를 사용할 수 있습니다 PatternLayoutEncoderBase에만 로그 패턴 설정을 지원