前言

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,一个简单的配置如下:

  1. handlers= java.util.logging.ConsoleHandler
  2. .level= INFO
  3. java.util.logging.ConsoleHandler.level = INFO
  4. java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
  5. com.lewis.test.TestLewis.level = SEVERE

这里简单解释下,第一行表示使用ConsoleHandler来处理打印日志,用来将信息打印到控制台。

第二行表示输出的日志级别是INFO,可以在level前加上任意类名或者完整的包名,用于精准控制类/包的日志级别,譬如第三行。

第四行表示输出的日志信息日期格式。

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

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

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

测试类

测试类的代码如下:

  1. package com.lewis.test;
  2. import java.io.NotSerializableException;
  3. import java.util.logging.Level;
  4. import java.util.logging.Logger;
  5. public class TestLewis {
  6. private static Logger LOGGER;
  7. static {
  8. System.setProperty("java.util.logging.config.file",
  9. "D:\\lewis\\workspace\\test\\src\\main\\resources\\logging.properties");
  10. //must initialize loggers after setting above property
  11. LOGGER = Logger.getLogger(TestLewis.class.getName());
  12. }
  13. public static void main(final String[] args) {
  14. System.out.println("----System.out----");
  15. System.err.println("----System.err----");
  16. LOGGER.info("an info msg");
  17. LOGGER.warning("a warning msg");
  18. LOGGER.severe("a severe msg");
  19. LOGGER.log(Level.INFO, "test1: a info msg", new NotSerializableException());
  20. LOGGER.log(Level.WARNING, "test1: a warning msg", new NotSerializableException());
  21. LOGGER.log(Level.SEVERE, "test1: a severe msg", new NotSerializableException());
  22. }

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

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

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

输出结果

控制台输出如下:

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

参考链接

如何使用Tomcat自带的日志实现tomcat-juli.jar的更多相关文章

  1. tomcat - 自带日志的区分

    在tomcat 中,logs文件夹下会存放着一些tomcat自带的日志文件,其中有三种文件: 1 > localhost_access_log.2017-12-28 文件,它用来记录tomcat ...

  2. 服务器是windows时tomcat无法打印所有日志配置修改

    Tomcat运行仅一天磁盘空间突然就增加了很多,发现是日志文件太大了,修改tomcat的日志配置即可. 查看目录所占空间大小: ? 1 [root@XXX webapps]du -sh 清理方法: ? ...

  3. 配置Tomcat监听80端口 配置Tomcat虚拟主机 Tomcat日志

    配置Tomcat监听80端口 • vim /usr/local/tomcat/conf/server.xml Connector port=" protocol="HTTP/1.1 ...

  4. nginx+tomcat把带WWW域名自动跳转到不带www域名方法

    nginx+tomcat把带WWW域名自动跳转到不带www域名方法在nginx.conf里面 include /etc/nginx/conf.d/*.conf;在应该server里增加: if ($h ...

  5. tomcat的catalina.out日志按自定义时间格式进行分割

    默认情况下,tomcat的catalina.out日志文件是没有像其它日志一样,按日期进行分割,而是全部输出全部写入到一个catalina.out,这样日积月累就会造成.out日志越来越大,给管理造成 ...

  6. 构建Logstash+tomcat镜像(让logstash收集tomcat日志)

    1.首先pull logstash镜像作为父镜像(logstash的Dockerfile在最下面): 2.构建my-logstash镜像,使其在docker镜像实例化时,可以使用自定义的logstas ...

  7. Tomcat打印运行时日志(控制台),访问日志,启动日志

    1.sh catlina.sh run以控制台形式输出 2.sever.xml.配置acesslog,设置访问日志输出 Tomcat的访问日志是靠org.apache.catalina.valves. ...

  8. tomcat端口号、日志、启停

    cd到tomcat目录下 1.[root@rusky bin]# ./shutdown.sh         关闭tomcat 2.[root@rusky bin]# ./startup.sh     ...

  9. Tomcat 的 catalina.out 日志分割

    一.背景 Tomcat 的 catalina.out 日志量不断增加,占用空间较大,且默认是不滚动的.因此,需要对其进行日志分割,并进行清理. 本文选用 Cronolog 对其进行分割. 二.安装 1 ...

随机推荐

  1. EM算法索引

    把这n个{试验结果来自B的概率}求和得到期望,平均后,得到B出正面的似然估计,同理有p和q. 重复迭代,直到收敛为止 http://blog.csdn.net/junnan321/article/de ...

  2. Android Button Maker(在线生成android shape xml文件的工具),真方便!

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/scry5566/article/details/25379275        直接上地址:http ...

  3. Flyweight Pattern

    1.Flyweight 模式以共享的方式高效的支持大量的细粒度对象,对象分为内部状态.外部状态.将可以被共享的状态作为内部状态存储在对象中,而外部状态在适当的时候作为参数传递给对象. 当以下所有的条件 ...

  4. 转回java,项目遇到的环境相关问题记录

    fastjson解析报错,兼容java8的time包:需要升级fastjson版本到1.2.9 https://www.oschina.net/question/129411_142776     j ...

  5. xml文件的解析(用dom4j解析)

    有个第三方的包,用来解析.xml文件比较方便,它是DOM4J.由于是第三方的,所以要使用它就要先下载,并包含进来.步骤: 1.打开dom4j官网,这里下载最新版dom4j-2.1.1.jar. 2.新 ...

  6. 【C/C++】获取当前系统时间

    #include<iostream> #include<Ctime> using namespace std; int main() { time_t t; time(& ...

  7. python 简易音乐盒子

    #!/usr/bin/env python#-*- coding:utf-8 -*- from Tkinter import *import tkMessageBoximport urllib def ...

  8. 洛谷 P1509 找啊找啊找GF(复习二维费用背包)

    传送门 题目背景 "找啊找啊找GF,找到一个好GF,吃顿饭啊拉拉手,你是我的好GF.再见." "诶,别再见啊..." 七夕...七夕...七夕这个日子,对于sq ...

  9. 使用Rest api管理Ceph网关

    背景 开发基于Ceph RadosGW的微服务,需要实现调用方可以通过rest api就能创建用户,获取用户信息等功能. 实现 Ceph的RadosGW自身就有该功能,这些创建用户.获取用户信息.获取 ...

  10. OpenFileDialog无法弹出的解决方法

    今天在写一个socket通信的winform小程序,由于socket的receive方法会阻塞线程,所以就使用了多线程解决.但在新建的线程中创建OpenFileDialog并调用其ShowDialog ...