4.6.1. 在 Tomcat 里面配置日志

本章介绍在开发环境怎么配置日志。

执行 Gradle setupTomcat 任务会将 Tomcat 安装到项目目录并且添加 Tomcat 的其它配置。具体来说,会在 tomcat/bin 目录创建 setenv.batsetenv.sh 环境配置文件,还有在 tomcat/conf 目录创建 logback.xml 文件。

除了所有的其它配置,setenv.* 还使用 CATALINA_OPTS 变量定义了 logback.xml 配置文件需要加载的参数。

logback.xml 定义了日志的配置。文件有如下结构:

  • appender 元素定义了日志的 “输出设备”。主要的 appenders 有 FILE - 文件CONSOLE - 终端ThresholdFilterlevel 参数定义了消息的阈值。文件输出的默认值是 DEBUG,终端输出的默认值是 INFO。也就是说 ERRORWARNINFODEBUG 消息会输出到文件,但是只有 ERRORWARNINFO 级别的消息输出到终端。

    file 参数定义了文件输出目标文件的路径。默认值是 tomcat/logs/app.log

  • logger 元素定义了编码角度打印消息的 logger 参数。Logger 名称是有级别的,比如对于 com.company.sample logger 的设置也会影响 com.company.sample.core.CustomerServiceBeancom.company.sample.web.CustomerBrowse 的 logger,前提是这两个类没有显式的声明他们各自的 logger 参数。

    日志的打印级别是通过 level 属性来定义最低级别。比如,如果定义的是 INFO 级别,那么 DEBUGTRACE 类型的消息就不会被日志记录。需要注意的一点就是,在 appender 里面设置的级别也会影响日志的打印。Logger 是针对类或者包的日志定义,而 appender 是针对文件或者终端的设置。

可以在 web 客户端的 Administration > Server Log 界面快速修改正在运行的服务的 logger 级别和 appender 的阈值。任何对日志的改动只会影响正在运行的服务,设置并不会保存在文件里。这个界面也支持从日志目录 (tomcat/logs)查看和加载 Tomcat 服务的日志。

平台会自动添加以下信息到日志文件的消息中:

  • application – 打印消息的应用程序名称。这个信息可以帮助定位消息是从哪个 block 打印的(Middleware, Web Client),因为这两个模块写的是同一个日志文件。

  • user – 调用打印消息代码的登录用户名。用来在日志里跟踪具体用户的行为。如果打印消息的代码没有被特定用户的会话调用,就不会在日志里添加用户信息。

比如,下面这个消息是被 admin 会话下调用的中间件(app-core)代码写入的:

16:12:20.498 DEBUG [http-nio-8080-exec-7/app-core/admin] com.haulmont.cuba.core.app.DataManagerBean - loadList: ...