我正在尝试获取一个记录器并为其添加一个特定的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不是一种聪明的编码方式,但是现在我想让这项工作成功。当我执行此代码时,我得到了我想要记录的文件,但里面没有日志。我检查过级别错误,但事实并非如此。我相信编码器/布局有问题。我不知道如何解决它。有人可以告诉我如何扩展类并应用这些新代码中的函数或错误。
答案 0 :(得分:2)
FileAppender
有一个类型参数class FileAppender[E]
,但是你实例化它而不提供这样的参数,因此scala决定将Nothing
作为类型放入。 addAppender
期望一个Appender[ILoggingEvent]
类型的追加器,这就是错误所说的。你现在要做的是要么使用现有的,要么创建自己的ILoggingEvent
子类并将其作为类型参数提供:
class MyLoggingEvent extends ILoggingEvent {
// implement ALL the methods
}
val fileAppender = new FileAppender[MyLoggingEvent]()
答案 1 :(得分: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]])
我将总结我自动记录/追加的所有努力,并尽快将其提出来。希望这也能帮助别人。