2012-10-01 38 views
1

我想獲取一個記錄器並添加一個特定的appender到它。我的代碼非常簡單,但我不確定如何使這個工作。添加一個Appender不起作用

val loggerInstance = LoggerFactory.getLogger("FOO.class") 
var fileAppender = new FileAppender() 
// fileAppender .setFile , sietPattern etc..the parameters i want 
loggerInstance.addAppender(fileAppender) 

我這裏得到一個錯誤

Multiple markers at this line 
- type mismatch; found : ch.qos.logback.core.FileAppender[Nothing] required: 
    ch.qos.logback.core.Appender[ch.qos.logback.classic.spi.ILoggingEvent] Note: Nothing <: 
    ch.qos.logback.classic.spi.ILoggingEvent, but Java-defined trait Appender is invariant in type E. You may wish to investigate a 
    wildcard type such as `_ <: ch.qos.logback.classic.spi.ILoggingEvent`. (SLS 3.2.10) 
    - Line breakpoint:loggerchange [line: 76] - addAppender 

我不知道這是什麼錯誤意味着以及如何解決它。有人能幫我嗎?

編輯:

我試圖做的是由drexin所告知的。我無法擴展界面並定義功能。只有三個函數,setName,getName和doAppend。我不確定如何定義這些功能。同時我嘗試了一些東西並刪除了錯誤。請查看代碼並讓我知道我所做的事情是否有意義。

val encoder = new PatternLayoutEncoder() 
encoder2.setContext(context) 
encoder2.setPattern("%msg%")  
fileAppender.setAppend(true) 
fileAppender.setContext(context) 
fileAppender.setEncoder(encoder2.asInstanceOf[Encoder[Nothing]]) 

loggerInstance.asInstanceOf[Logger].addAppender(fileAppender 
.asInstanceOf[Appender[ILoggingEvent]]) 

我知道使用asInstanceOf不是一種聰明的編碼方式,但現在我想做這個工作。當我執行這段代碼時,我得到了我想要登錄的文件,但裏面沒有日誌。我檢查了級別錯誤,但事實並非如此。我相信編碼器/佈局有問題。我不知道如何解決它。有人能告訴我如何擴展這個類並應用這個新代碼中的函數或錯誤。

回答

2

FileAppender有一個類型參數class FileAppender[E],但是你沒有提供這樣的參數就實例化了它,所以scala決定把Nothing作爲類型。 addAppender預計類型爲Appender[ILoggingEvent]的appender,這是錯誤說的。你有什麼現在要做的,就是既可以使用現有的,或者創建自己的ILoggingEvent子類,將它作爲Param類型:

class MyLoggingEvent extends ILoggingEvent { 
    // implement ALL the methods 
} 

val fileAppender = new FileAppender[MyLoggingEvent]() 
0

我的第二個方法的工作。我現在能夠看到日誌。我在模式中犯了錯誤。這只是一個小小的調整。

val encoder = new PatternLayoutEncoder() 
    encoder.setContext(context) 
    encoder.setPattern("%msg%n")  
    fileAppender.setAppend(true) 
    fileAppender.setContext(context) 
    fileAppender.setEncoder(encoder.asInstanceOf[Encoder[Nothing]]) 

    loggerInstance.asInstanceOf[Logger].addAppender(fileAppender 
    .asInstanceOf[Appender[ILoggingEvent]]) 

我將總結我所有的努力,自動記錄/追加,並儘快把它。希望能幫助別人。

相關問題