scala - 配置 logback 以写入不同的日志文件

标签 scala logging akka logback

我有一个有多个 Actor 的 Actor 系统。参与者按一组固定的域进行分组。目前,我只记录一个大日志文件,该文件将来自不同域的不同参与者的日志交错在一起。

如何配置 logback 以便每个参与者写入自己的 .log 文件。此外,与写入单个日志文件相比,写入不同的日志文件是否会影响性能?

最佳答案

您在这里需要的是带有基于 Actor/Actor 系统的鉴别器的 SiftingAppender。
在您的 logback.xml 中提供以下配置

<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator class="com.abc.ActorDomainBasedDiscriminator"/>
<sift>
    <appender name="FILE-${actorDomain}" class="ch.qos.logback.core.rolling.RollingFileAppender">
 <file>app-${actorDomain}.log</file>
...

此配置将导致创建日志文件,如“app-Domain1.log”、“app-Domain2.log”等...

定义一个类 ActorDomainBasedDiscriminator
import ch.qos.logback.classic.spi.LoggingEvent
import ch.qos.logback.core.sift.Discriminator
import ch.qos.logback.core.spi.ContextAwareBase

class ActorDomainBasedDiscriminator extends ContextAwareBase with Discriminator[LoggingEvent] {
  private val Key = "actorDomain";

  @volatile
  private var started = false;

  def getDiscriminatingValue(event: LoggingEvent) = {
    val loggerName = event.getLoggerName
    if(loggerName.startsWith("Domain"))
      loggerName
    else event.getLevel.toString
  }

 def getKey: String = Key

 …

 } 

现在像这样在 Actor 类中创建记录器......
   class Actor1 extends Actor {

      val logger = LoggerFactory.getLogger("Domain1")
      ....


    class Actor2 extends Actor {

      val logger = LoggerFactory.getLogger("Domain2")
      ....

  class Actor3 extends Actor {
      val logger = LoggerFactory.getLogger("Domain1")
      ...

您可以引用此链接以获取鉴别器示例

http://www.nurkiewicz.com/2013/04/siftingappender-logging-different.html

关于scala - 配置 logback 以写入不同的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25094841/

相关文章:

java - Akka Http解析实体Java

Dart Isolate vs Akka

java - 立即将 Spark 中的 Json 字符串索引到 Elasticsearch

scala - 使用 Scalas 新动态类型的动态代理

java - 无法记录到 jsf Web 应用程序中的文件

scala - Akka 和 future 的同时请求太多

scala - 如何使用 sbt 从发布中排除包?

scala - 在类型安全配置中使用 withFallBack 合并配置中的数组值

sql-server - 导出有关磁盘、CPU 和内存利用率的 SQL Server 信息

mysql - 如何使用触发器来记录 MySQL 中数据库更改的历史记录?