2010-07-01 88 views
11

我是Servlet容器的新手,並使用Tomcat 6.0.26創建了一個Web應用程序。我有'TODO:log'散佈在我的代碼中。我看到存在:Tomcat servlet日誌記錄

myServlet.getServletContext()日誌()

這似乎寫在Tomcat的 '/日誌' 目錄 'localhost' 的前綴的文件。我不需要任何先進的日誌記錄功能,但我希望日期,時間,消息和堆棧跟蹤至少。另外,我創建了一些我需要日誌功能的各種servlet使用的類。我需要將SevletContext注入這些類,以便它們可以登錄嗎?

似乎來自Apache的log4j是一個流行的日誌記錄軟件包,但我不確定它是否值得設置它的麻煩。

根據我的需要,建議採用什麼方式記錄日誌?

回答

8

除了所有的東西BalusC已經如上所述,在Java代碼中(的servlet /豆/不管)剛剛在任何記錄點導入和初始化記錄儀

package my.app; 

import org.apache.log4j.Logger; 

private static Logger logger = Logger.getLogger("classname"); 
// use any string you want 

然後你就可以登錄各級像

if (logger.isDebugEnabled()) { 
      logger.debug("Some log at this point"); 
     } 

... 

logger.info("Some info message here"); 

這些將出現在日誌中,具體取決於是否在log4j.propeties設置DEBUG或INFO

看看在01例和同一篇文章中的所有相關示例

+1

感謝您的幫助。我似乎無法找到這個難題的連接部分。 順便說一句,是否有一個原因,內置到JDK中的日誌工具不被更頻繁地使用? – Wilson 2010-07-01 16:00:39

+0

@威爾遜 - 更多關於這場辯論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

+0

@JoseK - 有沒有簡單的方法來記錄servlet活動到沒有log4j或控制檯的文件?我爲此發佈了一個問題。請幫助我 - https://stackoverflow.com/questions/23858552/simple-way-to-log-servlet-in-tomcat – 2014-05-25 18:50:40

10

你不想把你所有的業務和數據訪問代碼與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 

這個開球例如:如下最後填充它。你可以把它改成DEBUGINFO像這樣:

# 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找到。

希望這有助於你開始。

+0

感謝您的信息。我理解如何使用Log4j的主要缺陷是如何從代碼中使用它。我如何在Servlet中,在bean中,在POJO中使用它?我是否需要創建Log4j實例,然後查找並解析屬性或XML文件? – Wilson 2010-07-01 01:59:27

+0

只需使用'Logger#getLogger()',然後調試()','info()'等方法。你不需要每次都找到並解析它。如果它在類路徑中,log4j會自己做。這在初學者中確實是一個普遍問題,因爲他們不瞭解「classpath」。 – BalusC 2010-07-01 11:16:55

+1

迴應BalusC的說法,[SLF4J](http://www.slf4j.org/)+ [Logback](http://logback.qos.ch/)是更現代的伐木方式。由log4j的發明者創建,意在成爲log4j的後繼者。請參見[我的答案](http://stackoverflow.com/a/19947417/642706)[類似的問題](http://stackoverflow.com/questions/19933036/simplest-way-to-log-to-tomcat -catalina-out/19947417#19947417)以獲取更多信息。 – 2013-11-13 10:24:53