Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 仅播放日志显示类';play.Logger$ALogger';_Logging_Playframework_Playframework 2.0_Logback - Fatal编程技术网

Logging 仅播放日志显示类';play.Logger$ALogger';

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

我使用下一个回显模式进场!框架应用程序:

%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/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");