当前位置: 首页 > 知识库问答 >
问题:

是否动态更改日志添加器得筛选器?

郭鸿信
2023-03-14
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d [%X{traceId}] [%thread] %-5level %logger{36} %marker - %msg%n</pattern>
    </encoder>
</appender>

<!-- Root Config -->
<root level="${log_level:-INFO}">
    <appender-ref ref="ASYNC-SERVICE"/>
    <appender-ref ref="STDOUT"/>
</root>
def setLogLevel(value: Level, loggerName: String = org.slf4j.Logger.ROOT_LOGGER_NAME) = {
  val logger = LoggerFactory.getLogger(loggerName).asInstanceOf[Logger]

  logger.setLevel(LogbackLevel.valueOf(value.toString))
}

我试着在附加程序上操作级别过滤器,但似乎没有太大作用

共有1个答案

梁华清
2023-03-14

我最后做的是让根级别始终在Debug处日志,并为每个附加程序提供阈值过滤器:

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
    </filter>
    <encoder>
        <pattern>%d [%X{traceId}] [%thread] %-5level %logger{36} %marker - %msg%n</pattern>
    </encoder>
</appender>

<!-- Root Config -->
<root level="${log_level:-DEBUG}">
    <appender-ref ref="ASYNC-SERVICE"/>
    <appender-ref ref="STDOUT"/>
</root>

然后我使用groovy logback api中的ConfigurationDelegate类来查询附加项

 val context = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext] 

 val configuration = {
    val delegate = new ConfigurationDelegate
    delegate.setContext(context)
    delegate
  }

  /**
   * Sets the log level for a particular appender
   * @param value
   * @param appenderName
   */
  def setAppenderLevel(value: Level, appenderName: String) = {
    appenders.find(_.getName == appenderName) match {
      case Some(appender) =>
        val filters = appender.getCopyOfAttachedFiltersList

        filters.find(_.isInstanceOf[ThresholdFilter]).foreach(m => m.asInstanceOf[ThresholdFilter].setLevel(value.toString))
      case None =>
    }
  }

我查找了阈值筛选器并手工设置了值。

 类似资料:
  • 编辑 删除这一行后,将在控制台上打印日志。但是,我看不到正在创建的文件。

  • 对不起,我仍然是小新在这方面,只是万一有代码有人想看到我否定这里是整个代码要点嵌入 我花了2个星期建立这个应用程序,并已卡在这个过滤在过去的2天。我需要有这个应用程序MVP明天下午演示在一个就业活动为最近的毕业生,这是仅剩的2件事之一。 我没有足够的代表赏金,但任何帮助或建议都很感激

  • 问题内容: 我想要一个log4j配置,这样日志文件名应该像$ {System-name} log.log。也就是说,如果该应用程序在任何系统上启动,则无需更改配置文件或代码。它应该生成提到的日志文件名。谢谢。 问题答案: 我这样做: 1)通过以下方式初始化记录器: 2)在log4j.xml中我使用变量:

  • 我分别在和上找到了筛选器的解决方案,但我希望将它们结合起来。有可能吗?

  • 问题内容: 我想要的是类似于文档中的此示例的示例,但是具有唯一的输入,可以通过“ any”,“ name”或“ phone”属性来扮演过滤的三个角色,角色的更改是通过单击锚点完成的。这是准备好的代码http://jsfiddle.net/ubugnu/QuyCU/如何动态更新ng- model属性? 的HTML JS 问题答案: 您可以定义如下:动态更改应绑定到哪个变量(另一个变量在哪里)。 参见

  • 我有一个应用程序,其中包含许多在数据库中创建数据的组件。每个组件记录创建数据时所做的事情。有很多这样的组件,而且应用程序非常灵活,因此每次运行时不必总是执行相同的一组数据创建组件。 目前,所有内容都记录到一个文件中,这会生成一些开始变得不可管理的文件。我希望每个组件都可以登录到一个文件,该文件的名称描述了编写它的组件-应该登录到。 我见过的大多数解决方案似乎都假设不同的记录器是静态的,所以可以按名