我可以为一个特征配置一个记录器,与实现该特征的 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 /
..
}
可以分别控制 AppComponent
和 CassandraRepositoryComponents
的日志记录。目前,CassandraRepositoryComponents
采用 AppComponent
的日志记录配置,可能是因为主要的 class 是 AppComponent
。所以代码 val myLogger = LoggerFactory.getLogger(this.getClass.getName)
得到 AppComponent
class 名字?我怎样才能做到这一点?可能我需要将 CassandraRepositoryComponents
从 trait
更改为其他内容。那会是什么?
更新
我试图为 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="..."
中使用相同的名称。
我的 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 /
..
}
可以分别控制 AppComponent
和 CassandraRepositoryComponents
的日志记录。目前,CassandraRepositoryComponents
采用 AppComponent
的日志记录配置,可能是因为主要的 class 是 AppComponent
。所以代码 val myLogger = LoggerFactory.getLogger(this.getClass.getName)
得到 AppComponent
class 名字?我怎样才能做到这一点?可能我需要将 CassandraRepositoryComponents
从 trait
更改为其他内容。那会是什么?
更新
我试图为 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="..."
中使用相同的名称。