您不想将所有业务和数据访问代码与
ServletContext
捆绑在一起(当然,我假设您的业务和数据库代码没有在一个servlet类内部紧密耦合,而只是存在于它们自己的类层中,没有任何
javax.servlet
引用)。因此,我不建议使用
ServletContext#log()
。在现实世界中,它也很少被使用。
您是对的,log4j很受欢迎,尽管它已被
logback取代。设置log4j并不需要那么麻烦。我建议先使用比XML文件更易理解的属性文件开始。一旦您了解了log4j配置中发生的事情,您可以随时升级到XML文件。
创建名为
log4j.properties
的文件,并将其放置在类路径的根目录下,例如
/WEB-INF/classes
(或者如果您使用的是IDE,可以将其放置在
src
文件夹的根目录下,它最终会落在正确的位置)。您还可以将其保留在webapp之外,并通过在
Tomcat/conf/catalina.properties
中指定其路径来将其路径添加到服务器的运行时类路径中的
shared.loader
属性中。最后按以下方式填充它:
log4j.rootLogger = TRACE, console
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n
log4j.appender.file.File = /webapp/logs/web.log
log4j.appender.file.DatePattern = '.'yyyy-MM-dd
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n
这个启动示例默认记录TRACE
级别的日志。您可以像这样将其更改为DEBUG
或INFO
:
# Set root logger level and appender name.
log4j.rootLogger = INFO, console
这个例子默认使用控制台 appender。它会按照 Tomcat 的默认配置将日志记录到标准输出,而标准输出通常会被重定向到 /logs/localhost.yyyy-MM-dd.log
文件中。
但是,你可以通过以下方式将其更改为使用文件 appender:
# Set root logger level and appender name.
log4j.rootLogger = INFO, file
ConversionPattern
设置的详细信息可以在
PatternLayout
javadoc中找到。
希望这能帮助你入门。
Logger#getLogger()
然后使用debug()
、info()
等方法即可。您无需每次查找和解析它。如果它在类路径中,log4j 将自行处理。这确实是初学者常见的问题,因为他们不理解 "classpath"。 - BalusC