1

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 のログ出力から取得できませんでした。これが私のPlayログ構成です。

# Logger used by the framework:
logger.play=INFO

# Logger provided to your application:
logger.application=DEBUG

Play 2 Java クラスで使用したログ ステートメント:

play.Logger.debug("log output......");

UPDATE 1 これは、複数の依存関係の問題を解決するために私が行ったことです。

("com.jayway.facebooktestjavaapi" % "facebook-test-java-api" % "1.1.5" notTransitive()).exclude("org.slf4j", "slf4j-log4j12")

更新 2 上記のエラーを解決した後、ログ ステートメントはまだ「heroku ログ」に出力されません。そこで、ここ (https://github.com/playframework/Play20/wiki/SettingsLogger) に従って logger.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
4

1 に答える 1

3

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.

最初の問題を修正すると、2 番目の問題も解決する場合があります。それ以外の場合は、最初の問題 (SLF4J) を修正してから、カスタム ログ構成を使用している場合は、それが適切に設定されていることを確認します。

更新時に編集: カスタム 'logger.xml' を削除して再アップロードしてください。これは、「logger.xml」を犯人として指し示すはずです (他のログ構成を変更していない場合)。私は Heroku で Play のデフォルトのロギングを使用していますが、問題なく動作するので、それで問題ありません。

そうでない場合は、ログ構成に他の変更を加えたか、ログを停止している他のログ構成がアプリにあると確信しています。それを見つけて元に戻す必要があります。

リクエストに応じて編集:

私が述べたように、私の設定はデフォルトのものです:

# Root logger:
logger.root=ERROR

# Logger used by the framework:
logger.play=INFO

# Logger provided to your application:
logger.application=DEBUG

logger.xml はありません。できます。問題が発生している場合は、別の場所で構成をオーバーライドしている可能性があります。使用している jar や、Heroku によって表示されるログ内のその他の競合を確認して、その領域のエラーを示唆している可能性があります。

于 2012-07-07T13:07:42.563 に答える