我试图使用打印到控制台的日志来查看Spring框架内的执行流。目的是稍微了解一下Spring框架的内部工作。我在应用程序中将日志记录级别设置为ALL。日志中打印以下行:
2013-07-04 14:46:34 TRACE DispatcherServlet:1018 - Bound request context to thread: org.apache.catalina.connector.RequestFacade@13dd208
2013-07-04 14:46:34 DEBUG DispatcherServlet:823 - DispatcherServlet with name 'web' processing GET request for [/webtemplate/]
2013-07-04 14:46:34 TRACE DispatcherServlet:1088 - Testing handler map [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping@fedfb6] in DispatcherServlet with name 'web'
2013-07-04 14:46:34 DEBUG RequestMappingHandlerMapping:220 - Looking up handler method for path /
2013-07-04 14:46:34 TRACE RequestMappingHandlerMapping:264 - Found 1 matching mapping(s) for [/] : [{[/],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}]
2013-07-04 14:46:34 DEBUG RequestMappingHandlerMapping:227 - Returning handler method [public java.lang.String com.lister.custom.webtemplate.controller.MainController.index(org.springframework.ui.ModelMap)]
2013-07-04 14:46:34 DEBUG DefaultListableBeanFactory:246 - Returning cached instance of singleton bean 'mainController'
2013-07-04 14:46:34 TRACE DispatcherServlet:1122 - Testing handler adapter [org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter@771eb1]
我检查了源文件(?)和打印在所有行中的行号:
- DispatcherServlet:823
- DispatcherServlet:1018
- RequestMappingHandlerMapping:220
- 等等
试图看看里面发生了什么。
但是,在大多数情况下,我无法在相应的行号中找到任何相关的代码。许多人只是对这些行号发表了评论。
在上述日志行中,只有DispatcherServlet:823
具有打印日志的实际代码。
如何使用日志(DEBUG和TRACE)来跟踪Spring内部的执行流
注意:
我的应用程序使用的二进制文件和我正在检查的源文件的版本都是相同的-3.2.3.RELEASE
以下是我的记录器模式:
log4j.appender.console.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
(如果有帮助的话)。
您还需要检查超类。例如:
2013-07-04 14:46:34 TRACE DispatcherServlet:1018 - Bound request context to thread: org.apache.catalina.connector.RequestFacade@13dd208
实际上是由FrameworkServlet类的第1018行生成的。
也许你应该配置你的log4j记录器,也吐出完全限定的类名(而不仅仅是记录器名称):
%d{yyyy-MM-dd HH:mm:ss} %-5p %C{1}:%L - %m%n
(注意大写字母C而不是C)