Logging 仅播放日志显示类';play.Logger$ALogger';
我使用下一个回显模式进场!框架应用程序: %d-[%level][%lo{0}][%class][%F:%L][%method]:%msg%n%ex{full} 但始终显示为%class: [play.Logger$ALogger]或[play.api.LoggerLike$class] 而不是使用记录器的真实类 完整的logger.xml文件内容如下:Logging 仅播放日志显示类';play.Logger$ALogger';,logging,playframework,playframework-2.0,logback,Logging,Playframework,Playframework 2.0,Logback,我使用下一个回显模式进场!框架应用程序: %d-[%level][%lo{0}][%class][%F:%L][%method]:%msg%n%ex{full} 但始终显示为%class: [play.Logger$ALogger]或[play.api.LoggerLike$class] 而不是使用记录器的真实类 完整的logger.xml文件内容如下: ${application.home}/logs/application.log ${application.home}/logs/ap
${application.home}/logs/application.log
${application.home}/logs/application.%d{yyyyy-MM-dd}.log
30
%d-[%level][%lo{0}][%class][%F:%L][%method]:%msg%n%ex{full}
真的
%coloredLevel%logger{15}-%message%n%xException{5}
以下是几个输出示例:
2014-01-30 14:57:57671-[DEBUG][application][play.Logger$ALogger][Logger.java:332][DEBUG]:DBClient::isAlive:true
2014-01-30 14:57:57695-[INFO][application][play.Logger$ALogger][Logger.java:361][INFO]:应用程序已启动
2014-01-30 14:57:57699-[INFO][play][play.api.LoggerLike$class][Logger.scala:90][INFO]:应用程序已启动(开发)
谢谢 内部类Logger.ALogger是实际调用logback Logger的播放代码,因此这是预期的 不确定是否可以重写,以便它可以访问调用使用记录器的类的类。我想如果您真的想要输出,调用类的选项是直接在代码中使用logback。请参阅:
简而言之:logback进行类名、文件名和行名计算的方式是“抛出异常”并在stacktrace中查找特定帧。但是通过使用play的API而不是直接的logback API,因此索引的帧属于play代码 不确定您是否找到了问题的答案,但我发现以下方法可以解决问题:
Play.Logger.underlying().debug("Your debug message");
当然,您仍然必须确保提供一个自定义conf/logger.xml文件(正如您所做的那样)来替换Play的默认文件(),并在pattern元素中包含appender()中的%class转换说明符
<> P>前进前要考虑的一些事情:
- 我不知道这是否会对你的应用程序的任何方面产生负面影响,如可移植性等
- 还请注意,您必须将对Play.Logger的调用替换为Play.Logger.undernative(),或者围绕Play.Logger创建一个包装类。根据项目的大小,这可能是不可接受的
Play.Logger.underlying().debug("Your debug message");