scala – 配置回写以写入不同的日志文件
发布时间:2020-12-16 19:13:30 所属栏目:安全 来源:网络整理
导读:我有一个有多个演员的演员系统. Actor由一组固定的域分组.目前我只登录一个大日志文件,该文件交错来自属于不同域的不同参与者的日志. 如何配置logback,以便每个actor都写入自己的.log文件.另外,与写入单个文件相比,写入不同的日志文件会对性能产生影响吗?
我有一个有多个演员的演员系统. Actor由一组固定的域分组.目前我只登录一个大日志文件,该文件交错来自属于不同域的不同参与者的日志.
如何配置logback,以便每个actor都写入自己的.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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |