2014-07-11 2 views
1

그냥 내 학사 학위 논문을위한 작은 배우 응용 프로그램을 구축하고 지금은 일부 로깅을 추가하려고합니다.Akka 로깅 패턴을 변경할 수 없습니다

배우 시스템 내부에 로그인하려면 로깅을 사용하고 akka는 백그라운드에서 logback-classic을 제공합니다. 로깅은 잘 작동하지만 logback.xml에서 액터 시스템의 패턴을 변경하면 변경되지 않습니다.

누구나 slf4j를 통해 로깅하고 전역 패턴을 변경하는 방법을 알고 싶습니다. 배우 시스템 내부 로그인? 액터 시스템 외부

로그 출력 : SLF4J위한

[INFO] [07/11/2014 13:03:09.199] [EBTreeSimulation-akka.actor.default-dispatcher-4] [akka://EBTreeSimulation/user/nodeA] nodeA[InsertNewObject] received new object:188586187441591506, 188586187441591506, 10 

[INFO] [07/11/2014 13:03:09.199] [EBTreeSimulation-akka.actor.default-dispatcher-3] [akka://EBTreeSimulation/user/nodeB] nodeB[InsertNewObject] received new object:188586187441591506, 188586187441591506, 10 

로거 초기화 :

오기 조직 액터 시스템 내부에서

2014-07-11 13:03:09 INFO model.AccessLayer : New Object 10 with id:188586187441591506 ` 
2014-07-11 13:03:09 INFO model.AccessLayer : New Object 11 with id:188586187442115794` 

로그 출력 .slf4j.LoggerFactor actorSystem 대한 Y

class AccessLayer[T](communicationLayer:ActorRef, actors:List[ActorRef]) { 
    val log = LoggerFactory.getLogger(classOf[AccessLayer[T]]) 
    .... 
} 

로거 초기화 :

import akka.event.Logging 
import com.typesafe.config.ConfigFactory 

object SimulationMaster extends App{ 
    val system = ActorSystem("EBTreeSimulation", ConfigFactory.load.getConfig("akka")) 
    val log = Logging.getLogger(system,this) 
    .... 
} 

import akka.event.Logging 

class TreeActor[T](communication:ActorRef) extends Actor { 
    val log = Logging(context.system,this) 
    .... 

} 

logback.xml :

<configuration> 
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
    <File>./logs/myLog.log</File> 
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> 
     <fileNamePattern>logs/myLog.%i.log.zip</fileNamePattern> 
     <minIndex>1</minIndex> 
     <maxIndex>3</maxIndex> 
    </rollingPolicy> 
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> 
     <maxFileSize>5MB</maxFileSize> 
    </triggeringPolicy> 
    <encoder> 
     <pattern>%date{YYYY-MM-dd HH:mm:ss} %level %X{sourceThread} %logger{10} [%file:%line]: %msg%n</pattern> 
    </encoder> 
</appender> 
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <!--<target>System.out</target>--> 
    <encoder> 
     <pattern>%date{YYYY-MM-dd HH:mm:ss} %-5level %logger : %msg%n</pattern> 
    </encoder> 
</appender> 
<!--<logger name="akka" level="INFO" />--> 
<root level="info"> 
    <appender-ref ref="FILE"/> 
    <appender-ref ref="STDOUT" /> 
</root> 

application.conf :

akka { 
    # Loggers to register at boot time (akka.event.Logging$DefaultLogger logs 
    # to STDOUT) 
    loggers = ["akka.event.slf4j.Slf4jLogger"] 
    #event-handlers = ["akka.event.slf4j.Slf4jEventHandler"] 

    loglevel = "INFO" 
    stdout-loglevel = "DEBUG" 
    actor { 
     provider = "akka.cluster.ClusterActorRefProvider" 
     default-dispatcher { 
      throughput = 10 
     } 
    } 
    remote { 
     netty.tcp.port = 4711 
    } 
} 
+0

문제는이 줄'ConfigFactory.load.getConfig ("akka")'와 관련이 있다고 생각합니다. 시도하고 그것을 단지'ConfigFactory.load'로 변경하십시오.그렇게하면 자식 'akka'요소를보고 수정 된 로깅 설정을 가져옵니다. – cmbaxter

+0

위대한 문제가 해결되었습니다! 고마워. – prototyp

답변

1

문제는 akka가 사용자 정의 된 기본 구성 대신 기본 구성을로드한다는 것입니다.

수입 akka.event.Logging 수입 com.typesafe.config.ConfigFactory cmbaxter하는

object SimulationMaster extends App{ 
    val system = ActorSystem("EBTreeSimulation", ConfigFactory.load) 
    val log = Logging.getLogger(system,this) 
    .... 
} 

감사 : 구성의 로딩이 변경 될 수 있던 문제를 해결하기!

0

다른 답변이 효과적으로이 질문에 답변했습니다. 그러나 몇 가지 다른 관련 문제가있었습니다. 다음과 같이 문제를 디버그하는 데 도움하려면

, 당신은 ActorSystem 구성을 기록 할 수 있습니다 :

object SimulationMaster extends App{ 
    val conf = ConfigFactory.load 
    val system = ActorSystem("EBTreeSimulation", conf) 
    val log = Logging.getLogger(system,this) 
    log info conf.getObject("akka").toString 
    .... 
} 

을 나는 akka.loggers가 여전히 기본 로거 대신 SLF4J 로거로 설정 것을보고이 출력에서. 구성을 자세히 살펴보면 slf4j 로거가 설정되었음을 알았지 만 단수로akka.logger으로 설정되었습니다. 나는 그것을 복수화하고 모든 것이 작동하기 시작했다.

관련 문제