我有一个有多个 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/