2017-02-20 75 views
0

我有一个应用程序在能够创建actor系统将使用的配置之前需要调用某个外部系统(以解密敏感信息以使其保持简短)。Akka(JVM)在ActorSystem之前初始化记录器

是否可以在我的流程开始时初始化记录器,以便在与外部系统的通信出错时监控/调查工具可以访问日志?

// the following call will modify the config from a secret id read in the conf 
// and write the value "redis.password" after getting the value from an Azure Keyvault 
val updatedConf = KeyVaultHelper.decryptFromKeyVault(ConfigFactory.load("application"), 
    Map(
    "azure.keyvault.redis.password.secret-id", 
    "redis.password" 
)) 

// now we initialize the actor system with the updated conf 
// and the logging system will be initialized 
val system = ActorSystem("ClusterSystem", updatedConf) 
+0

你可以发布一些代码示例?真的很难说,因为我认为使用早期初始化器是最悲观的。 –

+0

我刚刚做了,不知道这是否有帮助? – CanardMoussant

+0

因此,您需要在创建系统之前使用记录器。我不确定我是否正确理解你的用例,但我会在下面粘贴一些代码。 –

回答

1

要做到这一点,你可以使用akka-slf4j库及其推荐的日志记录的后端logback一起。有两件事情需要配置。

logback.xml文件与构成记录程序:

<!-- src/main/resources/logback.xml --> 
<configuration> 
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> 
    <encoder> 
     <pattern>%date{ISO8601} %-5level %logger{36} %X{sourceThread} - %msg%n</pattern> 
    </encoder> 
    </appender> 
    <root level="debug"> 
    <appender-ref ref="STDOUT" /> 
    </root> 
</configuration> 

的SLF4J记录器必须从类型安全配置以及被配置:

# src/main/resources/application.conf 
akka { 
    loggers = ["akka.event.slf4j.Slf4jLogger"] 
    loglevel = "DEBUG" 
    logging-filter = "akka.event.slf4j.Slf4jLoggingFilter" 
} 

请参阅吹代码示例测试配置。

object LoggingTest extends App { 
    // Do all decryption logging here 
    val logger = LoggerFactory.getLogger(getClass) 
    logger.debug("Starting application. Decrypting info from config") 

    // Now you boot the system which will use the same logging config 
    val system = ActorSystem() 
    val actor = system.actorOf(Props[Echo]) 

    actor ! "hello" 
} 

class Echo extends Actor { 
    override def receive: Receive = { 
    case message => 
     context.system.log.debug(s"echo $message") 
    } 
} 

我用以下akka-actor & akka-slf4j 2.4.17和1.1.3 ch.qos.logback

让我知道你是否还有其他问题。

+0

对不起,没有透明。我使用logback作为我的演员系统的记录器,并且如果我在演员系统存在之前尝试登录,我想与我分享它的配置。目前,记录器由Akka自己初始化,我不确定如何初始化它。我想这实际上是非常简单的,我想要做的只是确保我创建的logback记录器会使用相同的配置。 – CanardMoussant

+0

这是可能的如果你使用akka-slf4j。午餐后我会编辑答案:) –

+0

是的,我愿意,谢谢! – CanardMoussant

相关问题