我可以为一个特征配置一个记录器,与实现该特征的 class 的记录器分开吗

Can I configure a logger for a trait separately from logger of the class implementing the trait

我的 play 应用程序有一个定义为 trait 的组件,如下所示:它是数据库连接的接口。

trait CassandraRepositoryComponents {
  def environment: Environment
  def configuration: Configuration
  def applicationLifecycle: ApplicationLifecycle
  val utilities:HelperMethods 
  val cassandraConnectionService = CassandraConnectionManagementService()

  val myLogger = LoggerFactory.getLogger(this.getClass.getName)
...
}

AppComponent classes 实现了特征。

class AppComponents (context: Context) extends BuiltInComponentsFromContext(context)
  with CassandraRepositoryComponents /
..
}

可以分别控制 AppComponentCassandraRepositoryComponents 的日志记录。目前,CassandraRepositoryComponents 采用 AppComponent 的日志记录配置,可能是因为主要的 class 是 AppComponent。所以代码 val myLogger = LoggerFactory.getLogger(this.getClass.getName) 得到 AppComponent class 名字?我怎样才能做到这一点?可能我需要将 CassandraRepositoryComponentstrait 更改为其他内容。那会是什么?

更新 我试图为 CassandraRepositoryComponents

提供硬编码名称
val cassandraRepositoryComponentsLogger = LoggerFactory.getLogger("CassandraRepositoryComponents")

但即使在 logback.xml 中启用了所有级别,我也看不到日志记录。

  <logger name="cassandraRepositoryComponentsLogger" level="ALL" additivity="false"> <appender-ref ref="STDOUT"/> </logger>

CassandraRepositoryComponents 的方法之一中,我正在使用记录器和 println 但我只能看到 println 消息。

println(s"database will connect with keyspace ${keyspaceName}") //SHOWS
    cassandraRepositoryComponentsLogger.debug(s"debugger - database will connect with keyspace ${keyspaceName}") //DOESN'T SHOW

您应该在 LoggerFactory.getLogger(...)<logger name="..." 中使用相同的名称。