如何使用Tomcat自带的日志实现tomcat-juli.jar

前言

Tomcat自带的日志实现是tomcat-juli.jar,它是对默认的JDK日志java.util.logging进行一定的封装,和标准JDK日志支持相同的配置,但是和log4j等常用的日志框架比起来功能要较为简陋。但是tomcat-juli可以针对不同的classloader来使用不同的配置文件,使得tomcat下不同的Web应用程序可以使用各自独立的日志文件。

如果我们想在代码中使用Tomcat自带的日志实现,也很简单,首先拿到tomcat-juli.jar。该jar包存在于Tomcat安装目录下的lib下,或者你可以直接在Maven仓库里选择你想要的版本去下载。

接着新建一个java项目,导入该jar包,然后在根目录下新建一个配置文件logging.properties

配置文件logging.properties

tomcat-juli使用的配置文件是logging.properties,一个简单的配置如下:

handlers= java.util.logging.ConsoleHandler
.level= INFO
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

com.lewis.test.TestLewis.level = SEVERE

这里简单解释下,第一行表示使用ConsoleHandler来处理打印日志,用来将信息打印到控制台。
第二行表示输出的日志级别是INFO,可以在level前加上任意类名或者完整的包名,用于精准控制类/包的日志级别,譬如第三行。
第四行表示输出的日志信息日期格式。

更多具体的配置可以去看看Tomcat的conf目录下的logging.properties,里边有很多配置和注释。

另外提一下,tomcat-juli的日志级别和log4j等是不一样的,其级别如下:

SEVERE (highest value) > WARNING > INFO > CONFIG > FINE > FINER > FINEST (lowest value)

测试类

测试类的代码如下:

package com.lewis.test;

import java.io.NotSerializableException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class TestLewis {

private static Logger LOGGER;

static {
System.setProperty("java.util.logging.config.file",
"D:\\lewis\\workspace\\test\\src\\main\\resources\\logging.properties");
//must initialize loggers after setting above property
LOGGER = Logger.getLogger(TestLewis.class.getName());
}

public static void main(final String[] args) {

System.out.println("----System.out----");
System.err.println("----System.err----");

LOGGER.info("an info msg");
LOGGER.warning("a warning msg");
LOGGER.severe("a severe msg");

LOGGER.log(Level.INFO, "test1: a info msg", new NotSerializableException());
LOGGER.log(Level.WARNING, "test1: a warning msg", new NotSerializableException());
LOGGER.log(Level.SEVERE, "test1: a severe msg", new NotSerializableException());

}

这里需要注意的是,tomcat-juli的打印语句也是不太一样的,如果需要打印出具体的堆栈信息就必须自己指定日志级别,如果使用自带的日志级别打印语句诸如.info()等,只能打印出字符串,不能打印出堆栈信息。

还有就是必须在代码的一开始就指定加载配置文件,通过System.setProperty("java.util.logging.config.file", "配置文件的路径");。如果没有这一步,你会发现你的配置文件根本没有效果。如果你去Tomcat的bin目录下的catalina.bat可以发现,里边也是配置了这个参数:

set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"

输出结果

控制台输出如下:

----System.out----
----System.err----
Dec 07, 2018 5:56:04 PM com.lewis.test.TestLewis main
SEVERE: a severe msg
Dec 07, 2018 5:56:05 PM com.lewis.test.TestLewis main
SEVERE: test1: a severe msg
java.io.NotSerializableException
        at com.lewis.test.TestLewis.main(TestLewis.java:75)

参考链接

Tomcat8下使用Log4j接管生成日志文件,按天存放,日志转换成json格式 亲测可用,日志格式如下: {"time":"2017-09-06 10:24:48,356","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory C:\Users\admin\Desktop\Tomcat8\webapps\docs"} {"time":"2017-09-06 10:24:48,375","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deployment of web application directory C:\Users\admin\Desktop\Tomcat8\webapps\docs has finished in 19 ms"} {"time":"2017-09-06 10:24:48,376","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory C:\Users\admin\Desktop\Tomcat8\webapps\examples"} {"time":"2017-09-06 10:24:48,648","logtype":"INFO","loginfo":"org.apache.catalina.core.ContainerBase.[Catalina].[bms-res.hzfh.com].[/examples]:ContextListener: contextInitialized()"} {"time":"2017-09-06 10:24:48,649","logtype":"INFO","loginfo":"org.apache.catalina.core.ContainerBase.[Catalina].[bms-res.hzfh.com].[/examples]:SessionListener: contextInitialized()"} {"time":"2017-09-06 10:24:48,654","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deployment of web application directory C:\Users\admin\Desktop\Tomcat8\webapps\examples has finished in 279 ms"} {"time":"2017-09-06 10:24:48,654","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory C:\Users\admin\Desktop\Tomcat8\webapps\host-manager"} {"time":"2017-09-06 10:24:48,682","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deployment of web application directory C:\Users\admin\Desktop\Tomcat8\webapps\host-manager has finished in 28 ms"} {"time":"2017-09-06 10:24:48,682","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deploying web application directory C:\Users\admin\Desktop\Tomcat8\webapps\manager"} {"time":"2017-09-06 10:24:48,711","logtype":"INFO","loginfo":"org.apache.catalina.startup.HostConfig:Deployment of web application directory C:\Users\admin\Desktop\Tomcat8\webapps\manager has finished in 29 ms"} {"time":"2017-09-06 10:24:48,744","logtype":"INFO","loginfo":"org.apache.coyote.http11.Http11AprProtocol:Starting ProtocolHandler ["http-apr-80"]"} {"time":"2017-09-06 10:24:48,759","logtype":"INFO","loginfo":"org.apache.coyote.ajp.AjpAprProtocol:Starting ProtocolHandler ["ajp-apr-8009"]"} {"time":"2017-09-06 10:24:48,760","logtype":"INFO","loginfo":"org.apache.catalina.startup.Catalina:Server startup in 20357 ms"}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值