2017-04-13 5 views
1

私はspring-bootプロジェクト(バージョン1.5.1)とlogbackを使って作業しています。私application.propertiesは、次のログの設定があります。springブートが指定されたファイルとcatalina.outの両方に記録されないようにする方法

logging.level.=info 
logging.level.org.acme.myapp=info 
logging.file=${catalina.home}/logs/AppLogFile.log 

アプリケーションはこれが指定AppLogFile.logに書き込まれ、またcatalina.outにされて何かをログに記録する場合:

==> AppLogFile.log <== 
2017-04-13 13:37:33.102 DEBUG 4646 --- [http-nio-8080-exec-25] c.l.c.c.controller.IndexPage    : isAllowedToSeeContent: Homebase: MOCKBASE 

==> catalina.out <== 
2017-04-13 13:37:33.102 DEBUG 4646 --- [io-8080-exec-25] c.l.c.c.controller.IndexPage    : isAllowedToSeeContent: Homebase: MOCKBASE 

==> AppLogFile.log <== 
2017-04-13 13:37:33.108 DEBUG 4646 --- [http-nio-8080-exec-25] c.l.c.c.controller.MedlistService  : MedlistService::isControlDay 2017-04-13, true 

==> catalina.out <== 
2017-04-13 13:37:33.108 DEBUG 4646 --- [io-8080-exec-25] c.l.c.c.controller.MedlistService  : MedlistService::isControlDay 2017-04-13, true 

これはadditivity問題のようです。ここで説明したようなlogback.xmlを提供することは本当に必要ですか:howto-configure-logback-for-logging? より直接的な方法はありますか?


アップデート:私はhowtoからの推薦に従ってください、私のクラスパスにlogback-spring.xmlを追加する場合であっても

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <include resource="org/springframework/boot/logging/logback/defaults.xml" /> 
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}" />  
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" /> 
    <root> 
    <appender-ref ref="FILE" /> 
    </root> 
</configuration> 

私が手に、次のエラー(一斉):

17:50:01.267 [localhost-startStop-1] DEBUG org.springframework.jndi.JndiPropertySource - JNDI lookup for name [LOGGING_patternLevel] threw NamingException with message: Name [LOGGING_patternLevel] is not bound in this Context. Unable to find [LOGGING_patternLevel].. Returning null. 
17:50:01.267 [localhost-startStop-1] DEBUG org.springframework.jndi.JndiTemplate - Looking up JNDI object with name [java:comp/env/LOGGING_patternlevel] 

空の文字列にlogging.pattern.console=を設定すると、このトリックを行うように見えますが、これは本当に適切な解決策ですか?

答えて

0

ターゲットtomcatが私のコントロール下になく、アプリケーションがサーバー上の唯一のアプリケーションではないため、logging.pattern.console=を空の文字列に設定してコンソールログを無効にすることに決めました。


Olaf Kockからの回答、私は確信している、また有効である、Considerations for production usage項を参照してください - しかし、私はそれが働いて取得に失敗しました是認しなければならない - そのため、私はそれをテストすることができませんでした:(

0

風袋のconf/logging.propertiesに次の行が含まれていますか?

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 

これはデフォルトパッケージの一部です。そこからConsoleHandlerエントリを削除します。

+0

はいしかし、ConsoleHandlerを削除しても効果はありません。 ハンドラー= 1catalina.org.apache.juli.AsyncFileHandler、...、4host-manager.org.apache.juli.AsyncFileHandler ' - ' .handlers = 1catalina.org.apache.juli.AsyncFileHandler' - - - 'grep -r isControlDay' 'catalina.out:18:05:29.640 ... isControlDay 2017-04-13、true' ' MyAppLog.log:18:05:29.640 ... isControlDay 2017-04-13、true' --- これはtomcat docuの推奨です。 - しかし、私は自分のアプリケーションのためだけでなく、システム全体で変更することを好むだろう。 – morecore

+0

この後に再起動する必要があります。あなたのアプリはcatalina.outに書き込みません。 Tomcatはstdoutに向けられたすべてのものをcatalina.outにパイプします。これを変更するかstdoutへの書き込みを停止することができます(独自のログで行うこともできます)。 –

+0

フィードバックいただきありがとうございます!しかし、.handlers = 1catalina.org.apache.juli.AsyncFileHandler、java.util.logging.ConsoleHandler'を '.handlers = 1catalina.org.apache 'に変更するだけです。juli.AsyncFileHandler'は効果がありません。私は新しくアンパックされたtomcat(8.5.12)と単純なhello worldの例でそれを試しました。 Tomcatが再起動されました。ログは 'hello.log'と' catalina.out'の両方に出力されます。また、tomcatが正しいプロパティファイルを使用していることを確認しました。それでもまだ何かが欠落しているようです。 – morecore

関連する問題