Scala Akka(JVM)在ActorSystem之前初始化记录器

Scala Akka(JVM)在ActorSystem之前初始化记录器,scala,logging,akka,Scala,Logging,Akka,我有一个应用程序,它需要调用一些外部系统来解密敏感信息,以便在能够创建actor系统将使用的配置之前保持简短 是否可以在我的流程开始时初始化记录器,以便监控/调查工具在与外部系统的通信出错时可以访问日志 // 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

我有一个应用程序,它需要调用一些外部系统来解密敏感信息,以便在能够创建actor系统将使用的配置之前保持简短

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

// 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)

要实现这一点,您可以使用该库及其推荐的日志后端。需要配置两件事

配置记录器的logback.xml文件:

%日期{ISO8601}%-5级%logger{36}%X{sourceThread}-%msg%n slf4j记录器也必须通过typesafe配置进行配置:

# src/main/resources/application.conf
akka {
  loggers = ["akka.event.slf4j.Slf4jLogger"]
  loglevel = "DEBUG"
  logging-filter = "akka.event.slf4j.Slf4jLoggingFilter"
} 
请参阅代码示例以测试配置

对象日志测试扩展应用程序{ //在这里进行所有解密日志记录 val logger=LoggerFactory.getLoggergetClass logger.debugStarting应用程序。正在从配置中解密信息 //现在,您将引导使用相同日志配置的系统 val系统=ActorSystem val actor=system.actoroprops[Echo] 演员!你好 } 类Echo扩展了Actor{ 覆盖def接收:接收={ 案例消息=> context.system.log.debugsecho$消息 } } 我使用了以下akka actor&akka-slf4j 2.4.17和ch.qos.logback 1.1.3


如果您还有任何问题,请告诉我。

您可以发布一些代码示例吗?很难说,对于最悲观的路径,我会说使用早期初始值设定项。我只是这样做了,不确定这是否有帮助?所以在创建系统之前,您需要使用记录器。我不确定我是否正确理解了您的用例,但我将在下面粘贴一些代码。另外,您是否尝试在ActorSystem内部使用记录器?如果没有,那么您应该能够在设置系统之前创建一个新的记录器。是的,我希望能够在创建ActorSystem之前记录任何错误,当然,如果事情进展顺利,也会记录。是的,很抱歉没有完全清楚。我正在使用logback作为actorsystem的记录器,如果我在actorsystem存在之前尝试登录,我想与您分享它的配置。目前,记录器是由Akka本身初始化的,我不确定如何初始化它。我想我想做的其实很简单:只要确保我将创建的logback logger使用相同的配置即可。如果使用akka-slf4j,这是可能的。午餐后我会编辑答案:请检查编辑并让我知道它是否解决了您的问题:它看起来很完美!我会测试并接受你的答案,谢谢!!很好,再次谢谢。这比预期的要简单得多:-。