1

私は次のことを達成したい:

All log-messages with TRACE or higher should be logged to log-trace.log
All log-messages with DEBUG or higher should be logged to log-debug.log

In general messages with DEBUG or higher should be logged to stdout, but:
  for Class de.foo only INFO or higher should be logged to stdout,
  for Class de.bar also TRACE and higher should be logged to stdout.

ファイルへの分割を機能させることができました:

## Root logger
log4j.rootLogger=trace,STDOUT,FILE_DEBUG,FILE_TRACE
## Appenders
log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender
log4j.appender.STDOUT.Threshold=DEBUG
# File appenders
log4j.appender.FILE_DEBUG=org.apache.log4j.RollingFileAppender
log4j.appender.FILE_DEBUG.File=logs/log-debug.log
log4j.appender.FILE_DEBUG.Threshold=DEBUG

log4j.appender.FILE_TRACE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE_TRACE.File=logs/log-trace.log
log4j.appender.FILE_TRACE.Threshold=TRACE

# [..] Layouts

しかし、stdout のデバッグ レベルを変更しようとすると、ファイルに含まれるものも変更されます。

log4j.logger.de.foo=info 

foo からの TRACE メッセージが trace-logfile から消えます。私が探しているのは、おそらく次のようなものです。

log4j.appender.FILE_DEBUG.de.foo.Threshold=DEBUG

しかし、それはうまくいきません。助けてくれてありがとう:)

4

2 に答える 2

2

正しいアプローチは、appender STDOUT 用のカスタム フィルターを作成することだと思います。したがって、特定のパッケージのコンソール ログの最小レベルを設定できます。同様のフィルターの例を次に示します。log4j は、クラスから特定のレベルを分離します

プロパティ構成ではフィルターがサポートされていないため、XML 構成を使用する必要があることに注意してください。

于 2012-11-22T19:03:27.800 に答える
-1

log4jでは不可能です。logbackを使用してください。とにかく優れています(ところで、slf4jファサードを使用)

于 2012-11-22T19:58:17.777 に答える