Scala Akka(JVM)在ActorSystem之前初始化记录器
我有一个应用程序,它需要调用一些外部系统来解密敏感信息,以便在能够创建actor系统将使用的配置之前保持简短 是否可以在我的流程开始时初始化记录器,以便监控/调查工具在与外部系统的通信出错时可以访问日志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
// 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,这是可能的。午餐后我会编辑答案:请检查编辑并让我知道它是否解决了您的问题:它看起来很完美!我会测试并接受你的答案,谢谢!!很好,再次谢谢。这比预期的要简单得多:-。