你不想把你所有的業務和數據訪問代碼與ServletContext
綁在一起(我當然假設你的業務和DB代碼並不緊密耦合在一個servlet類中,而只是生活在它們自己的層類,沒有任何javax.servlet
參考)。所以我不會推薦使用ServletContext#log()
。它在現實世界中也很少使用。
你說得對,log4j很受歡迎,即使它已經成功logback。設置log4j並不需要那麼麻煩。我建議從一個比XML文件更難理解的屬性文件開始。一旦您瞭解了log4j配置中發生了什麼,您可以隨時升級到XML文件。
創建一個名爲log4j.properties
的文件,將它放在類路徑根目錄的某處,例如/WEB-INF/classes
(或者如果您使用的是IDE,即src
文件夾的根目錄,它最終將放置在正確的位置)。您還可以將其保留在webapp外部,並通過在屬性Tomcat/conf/catalina.properties
中指定其路徑,將其路徑添加到服務器的運行時類路徑中。默認日誌在TRACE
水平
# Set root logger level and appender name.
log4j.rootLogger = TRACE, console
# Specify appenders.
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
# Configure console appender.
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} [%t] %-5p %m%n
# Configure file appender.
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
這個開球例如:如下最後填充它。你可以把它改成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找到。
希望這有助於你開始。
感謝您的幫助。我似乎無法找到這個難題的連接部分。 順便說一句,是否有一個原因,內置到JDK中的日誌工具不被更頻繁地使用? – Wilson 2010-07-01 16:00:39
@威爾遜 - 更多關於這場辯論http://stackoverflow.com/questions/31840/java-logging-vs-log4j和http://stackoverflow.com/questions/582428/java-util-logging-logger-and- log4j – JoseK 2010-07-01 16:38:20
@JoseK - 有沒有簡單的方法來記錄servlet活動到沒有log4j或控制檯的文件?我爲此發佈了一個問題。請幫助我 - https://stackoverflow.com/questions/23858552/simple-way-to-log-servlet-in-tomcat – 2014-05-25 18:50:40