关于 log4j 要了解的一件重要事情是它的“记录器层次结构”的概念,以及它如何影响它的设置。引用 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 文档。