Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Twitter日志和Scala自定义处理程序_Scala_Logging_Twitter - Fatal编程技术网

Twitter日志和Scala自定义处理程序

Twitter日志和Scala自定义处理程序,scala,logging,twitter,Scala,Logging,Twitter,我在Scala 6.5.0版中使用 我写了一个玩具使用示例: import com.twitter.logging._ object TestFormatter extends Formatter { override def format( record : java.util.logging.LogRecord) = "TEST %s> ".format( record.getLevel.getName ) + formatText(record) + lineTermin

我在Scala 6.5.0版中使用

我写了一个玩具使用示例:

import com.twitter.logging._

object TestFormatter extends Formatter 
{
    override def format( record : java.util.logging.LogRecord) = "TEST %s> ".format( record.getLevel.getName ) + formatText(record) + lineTerminator
}

object Main extends App
{
    override def main( args : Array[String] ) : Unit =
    {
        // obtain a logger
        val log = Logger.get( getClass )
        // clear any existing message handlers
        Logger.clearHandlers
        // add a new handler, using my toy formatter
        log.addHandler( ConsoleHandler( TestFormatter, Some( Level.DEBUG ) )() )
        // log a couple of test messages
        log.debug( "DEBUG LOG" )
        log.warning( "WARNING LOG" )
    }
}
类TestFormatter实际上不是必需的,但它将有助于突出我的问题。我非常确定,通过代码的输出,我应该看到以下内容:

TEST DEBUG> DEBUG LOG
TEST WARNING> WARNING LOG
然而,我实际得到的是:

TEST WARNING> WARNING LOG
WARNING: WARNING LOG
这引发了两个问题:

  • 为什么在我清除现有处理程序的情况下,其他处理程序也处理了我的警告消息解决
  • 为什么,当我将记录器的级别设置为debug时,我在debug级别记录的消息没有得到处理

  • 如果有人能解释这两个问题,我将不胜感激。

    对于第一个问题,您可以将代码更改为使用
    Logger.clearHandlers
    来摆脱额外的处理程序


    第二个问题:您可以添加
    log.setLevel(Level.DEBUG)
    以获得预期的输出。至于设置处理程序的级别做什么,它似乎无法控制任何事情。这就是臭虫;至少他们的库中有一个文档错误

    事实证明,我没有以预期的方式使用该框架。我发现这个课程是你改变记录者的方式。我的主要方法应该是:

    override def main( args : Array[String] ) : Unit =
    {
        val log = Logger.get( "" )
    
        LoggerFactory(
            node = "",
            level = Some( Level.DEBUG ),
            handlers = List( ConsoleHandler( TestFormatter, Some( Level.DEBUG ) ) )
        ).apply()
    
        log.debug( "DEBUG LOG" )
        log.warning( "WARNING LOG" )
    }
    
    我仍然不能完全确定为什么原始代码不能工作,特别是因为LoggerFactory的源代码似乎建议它通过调用addHandler()来注册新的处理程序

    然而,该主要方法的输出为:

    TEST DEBUG> DEBUG LOG
    TEST WARNING> WARNING LOG
    
    这就是我要找的