【Tomcat】tomcat logs 目錄下各日誌檔案的含義
tomcat每次啟動時,自動在logs目錄下生產以下日誌檔案,按照日期自動備份。可以幫助我們更好的找出錯誤。
一、 認識各種目錄的作用及記錄的資訊
目錄
1.catalina.日期.log
這個主要是記錄tomcat啟動時候的資訊,類似於我們在eclipse中啟動服務的時候在控制檯看到的資訊。在裡面可以看到啟動的JVM引數以及作業系統等日誌資訊。如果沒有使用log4j等日誌機制,系統的的錯誤資訊與列印語句也在這個日誌檔案中記錄。(linux下所有的日誌都在catalina.out中)
例如:
十二月 14, 2017 11:04:27 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did not find a matching property. 十二月 14, 2017 11:04:27 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did not find a matching property. 十二月 14, 2017 11:04:27 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did not find a matching property. 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Server version: Apache Tomcat/7.0.72 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Server built: Sep 14 2016 12:12:26 UTC 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Server number: 7.0.72.0 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: OS Name: Windows 8 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: OS Version: 6.2 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Architecture: amd64 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Java Home: C:\Program Files\Java2\jdk1.7.0_80\jre 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: JVM Version: 1.7.0_80-b15 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: JVM Vendor: Oracle Corporation 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: CATALINA_BASE: E:\tomcat\apache-tomcat-7.0.72 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: CATALINA_HOME: E:\tomcat\apache-tomcat-7.0.72 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Dcatalina.home=E:\tomcat\apache-tomcat-7.0.72 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Dcatalina.base=E:\tomcat\apache-tomcat-7.0.72 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Djava.endorsed.dirs=E:\tomcat\apache-tomcat-7.0.72\endorsed 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Djava.io.tmpdir=E:\tomcat\apache-tomcat-7.0.72\temp 十二月 14, 2017 11:04:27 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 十二月 14, 2017 11:04:28 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Djava.util.logging.config.file=E:\tomcat\apache-tomcat-7.0.72\conf\logging.properties 十二月 14, 2017 11:04:28 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: exit 十二月 14, 2017 11:04:28 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Xms3500m 十二月 14, 2017 11:04:28 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Xmx3500m 十二月 14, 2017 11:04:28 下午 org.apache.catalina.startup.VersionLoggerListener log 資訊: Command line argument: -Xss1024k 十二月 14, 2017 11:04:28 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 資訊: Loaded APR based Apache Tomcat Native library 1.2.8 using APR version 1.5.2. 十二月 14, 2017 11:04:28 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 資訊: APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true]. 十二月 14, 2017 11:04:29 下午 org.apache.catalina.core.AprLifecycleListener initializeSSL 資訊: OpenSSL successfully initialized (OpenSSL 1.0.2h 3 May 2016) 十二月 14, 2017 11:04:29 下午 org.apache.coyote.AbstractProtocol init 資訊: Initializing ProtocolHandler ["http-nio-80"] 十二月 14, 2017 11:04:29 下午 org.apache.tomcat.util.net.NioSelectorPool getSharedSelector 資訊: Using a shared selector for servlet write/read 十二月 14, 2017 11:04:29 下午 org.apache.coyote.AbstractProtocol init 資訊: Initializing ProtocolHandler ["ajp-apr-8009"] 十二月 14, 2017 11:04:29 下午 org.apache.catalina.startup.Catalina load 資訊: Initialization processed in 5531 ms 十二月 14, 2017 11:04:29 下午 org.apache.catalina.core.StandardService startInternal 資訊: Starting service Catalina 十二月 14, 2017 11:04:30 下午 org.apache.catalina.core.StandardEngine startInternal 資訊: Starting Servlet Engine: Apache Tomcat/7.0.72 十二月 14, 2017 11:04:31 下午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom 資訊: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [367] milliseconds. 十二月 14, 2017 11:04:32 下午 org.apache.catalina.startup.HostConfig deployDescriptor 資訊: Deploying configuration descriptor E:\tomcat\apache-tomcat-7.0.72\conf\Catalina\localhost\Exam.xml 十二月 14, 2017 11:04:32 下午 org.apache.catalina.startup.SetContextPropertiesRule begin 警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Exam' did not find a matching property. 十二月 14, 2017 11:04:42 下午 org.apache.catalina.startup.TldConfig execute 資訊: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time. 十二月 14, 2017 11:05:01 下午 org.apache.catalina.startup.HostConfig deployDescriptor 資訊: Deployment of configuration descriptor E:\tomcat\apache-tomcat-7.0.72\conf\Catalina\localhost\Exam.xml has finished in 29,545 ms 十二月 14, 2017 11:05:01 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deploying web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\docs 十二月 14, 2017 11:05:02 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deployment of web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\docs has finished in 227 ms 十二月 14, 2017 11:05:02 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deploying web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\examples 十二月 14, 2017 11:05:02 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deployment of web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\examples has finished in 659 ms 十二月 14, 2017 11:05:02 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deploying web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\host-manager 十二月 14, 2017 11:05:02 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deployment of web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\host-manager has finished in 192 ms 十二月 14, 2017 11:05:02 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deploying web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\manager 十二月 14, 2017 11:05:03 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deployment of web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\manager has finished in 134 ms 十二月 14, 2017 11:05:03 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deploying web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\ROOT 十二月 14, 2017 11:05:03 下午 org.apache.catalina.startup.HostConfig deployDirectory 資訊: Deployment of web application directory E:\tomcat\apache-tomcat-7.0.72\webapps\ROOT has finished in 106 ms 十二月 14, 2017 11:05:03 下午 org.apache.coyote.AbstractProtocol start 資訊: Starting ProtocolHandler ["http-nio-80"] 十二月 14, 2017 11:05:03 下午 org.apache.coyote.AbstractProtocol start 資訊: Starting ProtocolHandler ["ajp-apr-8009"] 十二月 14, 2017 11:05:03 下午 org.apache.catalina.startup.Catalina start 資訊: Server startup in 33450 ms
2.commons-daemon.日期.log
這個日期放的估計是利用服務方式啟動tomcat作為守護程序的日誌記錄,因為我的tomcat啟動方式是以服務的方式啟動的,索引產生這個日誌檔案記錄了服務的啟動狀態。
例如:
[2017-12-16 15:45:49] [info] [1706572] Commons Daemon procrun (1.0.15.0 64-bit) started [2017-12-16 15:45:49] [info] [1706572] Running 'Tomcat7' Service... [2017-12-16 15:45:49] [info] [1706632] Starting service... [2017-12-16 15:45:51] [info] [1706632] Service started in 1617 ms. [2017-12-16 15:50:57] [info] [1716024] Stopping service... [2017-12-16 15:50:58] [info] [1716024] Service stop thread completed. [2017-12-16 15:50:59] [info] [1706572] Run service finished. [2017-12-16 15:50:59] [info] [1706572] Commons Daemon procrun finished [2017-12-16 15:51:21] [info] [1711056] Commons Daemon procrun (1.0.15.0 64-bit) started [2017-12-16 15:51:22] [info] [1711056] Running 'Tomcat7' Service... [2017-12-16 15:51:22] [info] [1716072] Starting service... [2017-12-16 15:51:23] [info] [1716072] Service started in 1511 ms.
3.host-manager.日期.log
這個估計是放tomcat的自帶的manager專案的日誌資訊的,也沒有看到有什麼重要的日誌資訊
4.localhost.日期.log
這個類似於第一種日誌,可是資訊沒有第一種全
5.localhost_access_log.日期.txt
這個是存放訪問tomcat的請求的所有地址以及請求的路徑、時間,請求協議以及返回碼等資訊(重要)
例如:
0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:03 +0800] "GET /Exam/image/newsLogo.jpg HTTP/1.1" 304 - 0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:06 +0800] "POST /Exam/train_findStudyTraincontentByFy.action HTTP/1.1" 200 25 0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:06 +0800] "POST /Exam/newsIP_getTypeNews.action HTTP/1.1" 200 258 0:0:0:0:0:0:0:1 - - [14/Dec/2017:23:24:06 +0800] "POST /Exam/newsIP_getTypeNews.action HTTP/1.1" 200 2338
6.manager.日誌.log
這個估計也是manager專案專有的日誌檔案,看不出有什麼重要的資訊
7.tomcat7-stderr.日期.log
這個是log4j的錯誤日誌,因此在程式中要合理的捕捉異常。
8.tomcat7-stdout.日期.log (類似於eclipse的控制檯的資訊)
這個是程式中的System語句列印的日誌(包括系統丟擲的異常),也終於明白了為什麼一再強調不能用列印語句進行系統除錯
針對上面7,8做的測試:
log4j.properties
### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n ### set log levels - for more verbose logging change 'info' to 'debug' ### #\u5728\u5F00\u53D1\u9636\u6BB5\u65E5\u5FD7\u7EA7\u522B\u4F7F\u7528debug log4j.rootLogger=error, stdout ### \u5728\u65E5\u5FD7\u4E2D\u8F93\u51FAsql\u7684\u8F93\u5165\u53C2\u6570 ### #log4j.logger.cn.xm.exam.mapper.exam=TRACE
TestAction.java
package cn.xm.exam.action.exam.exam; import javax.management.RuntimeErrorException; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import com.opensymphony.xwork2.ActionSupport; import jxl.common.Logger; @Controller @Scope("prototype") public class TestAction extends ActionSupport { private Logger logger = Logger.getLogger(TestAction.class); public String syso() { System.out.println("這是列印語句"); return SUCCESS; } public String loginfo() { logger.info("這是info方法的記錄資訊"); return SUCCESS; } public String error() { try { int i = 1 / 0; } catch (Exception e) { logger.error("故意除零了", e); } return SUCCESS; } public String notcatch() { int i = 1 / 0; return SUCCESS; } public String runtimeexe() { try { int i = 1 / 0; } catch (Exception e) { throw new RuntimeException("除零執行時異常", e); } return SUCCESS; } }
struts配置
<!-- 全域性結果集,將response轉換為json傳到前臺 --> <global-results> <result name="success" type="json"> <param name="root">response</param> </result> </global-results> <action name="test_*" class="testAction" method="{1}"></action>
(1)訪問:http://localhost/Exam/test_syso.action
tomcat7-stdout.2017-12-14.log中多一條: 這是列印語句(每次訪問日誌都會記錄下來)
(2)訪問:http://localhost/Exam/test_loginfo.action
tomcat7-stdout.2017-12-14.log中多出上面的日誌記錄資訊,設定log4j的日誌級別為error則不會在日誌檔案中記錄此資訊。
2017-12-16 15:51:22 Commons Daemon procrun stdout initialized 這是列印語句 這是列印語句 這是列印語句 這是列印語句 這是列印語句 這是列印語句 這是info方法的記錄資訊 這是info方法的記錄資訊
(3)訪問:http://localhost/Exam/test_error.action
tomcat7-stderr.2017-12-15.log會記錄錯誤資訊:
Error: 故意除零了 java.lang.ArithmeticException: / by zero at cn.xm.exam.action.exam.exam.TestAction.error(TestAction.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:871) at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1294) at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:117) at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:108) at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1370) at ognl.ASTMethod.getValueBody(ASTMethod.java:91) at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) at ognl.SimpleNode.getValue(SimpleNode.java:258) at ognl.Ognl.getValue(Ognl.java:467) at ognl.Ognl.getValue(Ognl.java:431) at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:352) at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:404) at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:350) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:430) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:290) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:251) at org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:168) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:76) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:229) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:125) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:253) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:140) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:245) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:575) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:81) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.logging.log4j.core.web.Log4jServletFilter.doFilter(Log4jServletFilter.java:66) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:442) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1083) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:640) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1756) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1715) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
(4)對於未捕捉的異常也會在tomcat7-stdout.日期.log記錄。也就是會在控制檯的地方列印,如果未攔截會拋給使用者。
(5)訪問:http://localhost/Exam/test_runtimeexe.action
同樣會在tomcat7-stdout.日期.log記錄
總結:
系統中不能使用System,out。。。列印的方式進行除錯,這些最後都會儲存到日誌檔案浪費記憶體。可以使用log4j的info進行除錯,最後釋出的時候將log4j的日誌級別調高則不會列印在日誌檔案中,這也是開發的一條重要原則。
系統中隊異常要進行捕獲,這樣釋出後可以在日誌中更好的檢視錯誤資訊,同時不會把日誌拋給使用者。
二、設定日誌級別以及輸出位置
1.讓所有檔案都輸出到同一個檔案中
開啟Tomcat目錄conf\logging.properties,修改如下,所有日誌輸出到tomcat開頭的檔案中
1catalina.org.apache.juli.FileHandler.level = FINE
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
# 1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.prefix = tomcat.
2localhost.org.apache.juli.FileHandler.level = FINE
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
# 2localhost.org.apache.juli.FileHandler.prefix = localhost.
2localhost.org.apache.juli.FileHandler.prefix = tomcat.
3manager.org.apache.juli.FileHandler.level = FINE
3manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
# 3manager.org.apache.juli.FileHandler.prefix = manager.
3manager.org.apache.juli.FileHandler.prefix = tomcat.
4host-manager.org.apache.juli.FileHandler.level = FINE
4host-manager.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
# 4host-manager.org.apache.juli.FileHandler.prefix = host-manager.
4host-manager.org.apache.juli.FileHandler.prefix = tomcat.
2.開啟訪問日誌
編輯 ${catalina}/conf/server.xml 檔案. 注 :${catalina} 是 tomcat 的安裝目錄
<!--
pattern可以修改格式
common 的值: %h %l %u %t %r %s %b
pattern 也可以根據需要自由組合, 例如 pattern="%h %l"
對於各fields欄位的含義請參照 :
http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html 中的 Access Log Valve 項
3.修改tomcat日誌級別
Tomcat 日誌分為下面5類:
catalina 、 localhost 、 manager 、 admin 、 host-manager
每類日誌的級別分為如下 7 種:
SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)
日誌級別的設定方法
修改 conf/logging.properties 中的內容,設定某類日誌的級別
示例:
設定 catalina 日誌的級別為: FINE
1catalina.org.apache.juli.FileHandler.level = FINE
禁用 catalina 日誌的輸出:
1catalina.org.apache.juli.FileHandler.level = OFF
輸出 catalina 所有的日誌訊息均輸出:
1catalina.org.apache.juli.FileHandler.level = ALL