log4j について理解しておくべき重要なことの 1 つは、「ロガー階層」の概念と、これが設定にどのように影響するかです。log4jのドキュメントを引用するには、
ロガーの名前の後にドットが続く場合、ロガーは別のロガーの祖先であると言われます。ロガーは、それ自体と子孫ロガーの間に祖先がない場合、子ロガーの親であると言われます。
たとえば、「com.foo」という名前のロガーは、「com.foo.Bar」という名前のロガーの親です。同様に、「java」は「java.util」の親であり、「java.util.Vector」の祖先です。この命名スキームは、ほとんどの開発者にとって馴染みのあるものです。
ロガーはその親の設定を継承し、「ルート ロガー」は常に階層の最上位にあります。したがって、ルート ロガーを「デフォルト」のロガー設定としてある程度扱うことができ、コードに含まれるロガーだけに対してこれらの設定を追加することができます。
これをコードで設定する方法はわかりませんが、log4j.properties ファイルを使用して行うことは次のとおりです。
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/springapp.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Direct log messages to console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Target=System.out
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
# Root logger settings: by default only log messages at level "ERROR" and above
# will be logged. These messages will be written to console
log4j.rootLogger=error, console
# All loggers with names starting with "org.somecompany.someproject"
# will log messages at all levels "DEBUG" and above.
# They will be written to file as well as console; writing to console
# is enabled since that setting is inherited from the root logger.
log4j.logger.org.somecompany.someproject=debug, file
次に、各クラスのロガーがそのクラスの完全修飾名として命名されていると仮定すると、上記の構成の「org.somecompany.someproject」をプロジェクト内のパッケージのルート パッケージ名に置き換えるだけで、あなたが望む行動。
詳細については、log4j のドキュメントを参照してください。