当我将Play 2应用程序部署到Heroku时,我可以从"heroku日志"中看到以下日志。
2012-07-05T10:13:08+00:00 app[web.1]: Play server process ID is 3
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: Class path contains multiple SLF4J bindings.
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: Found binding in [jar:file:/app/target/staged/slf4j-log4j12-1.6.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: Found binding in [jar:file:/app/target/staged/logback-classic-1.0.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
2012-07-05T10:13:09+00:00 app[web.1]: log4j:WARN No appenders could be found for logger (com.jolbox.bonecp.BoneCPDataSource).
2012-07-05T10:13:09+00:00 app[web.1]: log4j:WARN Please initialize the log4j system properly.
2012-07-05T10:13:09+00:00 app[web.1]: log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
当我尝试从Play应用程序打印日志时,我无法从heroku日志输出中获取它。这是我的播放日志配置。
# Logger used by the framework:
logger.play=INFO
# Logger provided to your application:
logger.application=DEBUG
我在Play 2 java类中使用的日志语句:
play.Logger.debug("log output......");
更新 1这就是我为解决多个依赖项问题所做的。
("com.jayway.facebooktestjavaapi" % "facebook-test-java-api" % "1.1.5" notTransitive()).exclude("org.slf4j", "slf4j-log4j12")
更新 2在我解决了上述错误后,日志语句仍然没有输出到"heroku logs"。所以我按照这里(https://github.com/playframework/Play20/wiki/SettingsLogger)设置记录器.xml。但它仍然没有输出任何东西。
$ vi conf/application.conf
logger.resource=dev-logger.xml
db.default.logStatements=true
$ cat conf/dev-logger.xml
<configuration>
<conversionRule conversionWord="coloredLevel" converterClass="play.api.Logger$ColoredLevel" />
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${application.home}/logs/application.log</file>
<encoder>
<pattern>%date - [%level] - from %logger in %thread %n%message%n%xException%n</pattern>
</encoder>
</appender>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%coloredLevel %logger{15} - %message%n%xException{5}</pattern>
</encoder>
</appender>
<logger name="play" level="TRACE" />
<logger name="application" level="TRACE" />
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
更新 3我将所有内容还原并使用原始应用程序日志,但仍然没有输出。
# Root logger:
logger.root=DEBUG
# Logger used by the framework:
logger.play=DEBUG
# Logger provided to your application:
logger.application=DEBUG
# Logger ebean
logger.com.jolbox=DEBUG
如果您阅读 Heroku 日志,您会注意到您的日志系统已损坏。首先,您有多个 SLF4J 实例:
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: Class path contains multiple SLF4J bindings.
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: Found binding in [jar:file:/app/target/staged/slf4j-log4j12-1.6.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
2012-07-05T10:13:08+00:00 app[web.1]: SLF4J: Found binding in [jar:file:/app/target/staged/logback-classic-1.0.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
其次,您没有定义任何追加器,这意味着您的日志消息不会打印在任何地方:
2012-07-05T10:13:09+00:00 app[web.1]: log4j:WARN No appenders could be found for logger (com.jolbox.bonecp.BoneCPDataSource).
2012-07-05T10:13:09+00:00 app[web.1]: log4j:WARN Please initialize the log4j system properly.
修复第一个问题也可以解决第二个问题。否则,请修复第一个问题 (SLF4J),然后,如果您使用的是自定义日志记录配置,请验证它是否已正确设置。
更新时编辑:请删除您的自定义"记录器.xml"并重新上传。它应该可以工作,这将指向您的"记录器.xml"作为罪魁祸首(如果您没有更改任何其他日志配置)。我正在使用 Heroku 中播放的默认日志记录,它工作正常,所以它应该适合您。
如果没有,那么我很肯定您对日志配置进行了其他一些更改,或者您的应用程序中还有其他一些日志配置正在停止日志。您应该找到并还原它。
根据要求编辑:
正如我所提到的,我的配置是默认的:
# Root logger:
logger.root=ERROR
# Logger used by the framework:
logger.play=INFO
# Logger provided to your application:
logger.application=DEBUG
没有记录器.xml,没有别的。它有效。如果您遇到问题,可能是您在其他地方覆盖了配置,请检查您使用的任何 jar 或 Heroku 显示的日志中可能暗示该区域存在错误的任何其他冲突。