秉承着某种执念我今天决定不用Logback而是和Java的logging肛到底,现在总结一下研究成果:

日志等级

日志等级有七种,severe,warning,info,fine,finer,finest,config,这七种均可以作为方法名,且是枚举类Level中的枚举量。使用方法很简单,类似logger.info(String msg)的形式即可使用,但是接下来有一个比较坑的地方:默认只能打印info,warning,severe这三个等级的日志,如果你想用更低等级的日志,比如说debug时看信息,就要进行复杂的配置。

如果你仅仅将日志输出到文件而不需要使用控制台,则比较容易,直接使用setLevel方法即可。但是,如果你想使用控制台,就要知道,日志能否显示在控制台不仅取决于它这个级别能否被打印,还取决于全局Logger配置中是否允许这个级别的日志显示在控制台。所以,想在控制台中查看低等级日志,则需要手动改写loggerManager的配置类。

加载配置文件

java8以前的全局配置文件在jre/lib中,从java9开始挪到了jre/conf中,但是我极不推荐你更改这里的配置,我这里建议你对其进行单独加载,仅对你的应用生效。这里给出Springboot加载全局日志配置文件的方法,我将自定义的配置文件放在了/resources/logging.properties

@Component
public class LogConfig {
@PostConstruct
public void setLogManager(){
LogManager logManager = LogManager.getLogManager();
try {
logManager.readConfiguration(new ClassPathResource("logging.properties").getInputStream());
} catch (Exception e) {
//添加你方便的显示错误的方式。
}
}
}

这里我使用了Spring提供的ClassPathResource类,这个类十分方便,可以直接指向resources默认目录,并提供了转换成文件/IO流等多种方案方便你的类对其进行读取。另外logManager是一个单例,一旦更改配置全局的Log都会加载你的自定义配置。就不要吐槽我为什么要在Springboot里用java自己的日志类了,由于项目是多个项目合并而来的。这里不用ClassPathResource类也有很多方法去读,比如用文件操作,不再叙述。

配置文件

之后,我们就可以在对应目录编写配置文件了:

#handler
handlers= java.util.logging.ConsoleHandler
#全局日志等级
.level= INFO
#输出日志文件名格式
java.util.logging.FileHandler.pattern = %h/java%u.log
#日志文件长度限制
java.util.logging.FileHandler.limit = 50000
#日志数目
java.util.logging.FileHandler.count = 1
#锁的数量
java.util.logging.FileHandler.maxLocks = 100
#日志默认形式
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
#控制台显示的日志等级
java.util.logging.ConsoleHandler.level = FINE
#选择日志输出格式
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
#对格式进行自定义
java.util.logging.SimpleFormatter.format=[%1$tF %1$tT] [%4$-7s] %5$s %n
#对特殊类的等级特殊说明
com.changhe.Utils.LogUtils.level=FINE

比如这里,我未设置handler,设置了全局显示INFO级,我的Debug用logger显示到Fine级(方法是将以该类类名为名的logger的等级设为FINE,参考代码),并允许控制台输出Fine级消息,并自定义了日志输出格式,有关于格式定义的写法,可以去查阅Java的Formatter类,这种写法常用于定义时间格式等,较为复杂。

一个单例模式的logger获取方式

最后提供一下我写的饿汉模式的日志类单例,考虑到日志要记录类名,这种方式并不真的很适合,但这里由于我写的这个logger只负责自定义输出,所以可以采用这种方便且减少内存消耗的做法:

import java.util.logging.*;

public class LogUtils {
private static LogUtils logUtils = new LogUtils();
public static LogUtils getLogUtils() {
return logUtils;
}
private Logger logger;
private LogUtils() {
logger = Logger.getLogger(LogUtils.class.getName());
}
public Logger getLogger() {
return logger;
}
}

java.util.logging的使用的更多相关文章

  1. Java程序日志:java.util.logging.Logger类

    一.Logger 的级别 比log4j的级别详细,全部定义在java.util.logging.Level里面.各级别按降序排列如下:SEVERE(最高值)WARNINGINFOCONFIGFINEF ...

  2. java.util.logging.Logger 使用详解

    概述: 第1部分 创建Logger对象 第2部分 日志级别 第3部分 Handler 第4部分 Formatter 第5部分 自定义 第6部分 Logger的层次关系 参考 第1部分 创建Logger ...

  3. java.util.logging.Logger使用详解

    一.创建Logger对象   static Logger getLogger(String name)           为指定子系统查找或创建一个 logger. static Logger ge ...

  4. java.util.logging.Logger基础教程

    从JDK1.4开始即引入与日志相关的类java.util.logging.Logger,但由于Log4J的存在,一直未能广泛使用.综合网上各类说法,大致认为: (1)Logger:适用于小型系统,当日 ...

  5. Java日志工具之java.util.logging.Logger

    今天总结下JDK自带的日志工具Logger,虽然它一直默默无闻,但有时使用它却比较方便.更详细的信息可以查看JDK API手册,本文只是简单示例入门. 创建Logger 我们可以使用Logger的工厂 ...

  6. 基于java.util.logging实现轻量级日志记录库(增加根据当前类class初始化,修复线程池模型(javaEE)下的堆栈轨迹顺序与当前调用方法不一致问题)

    前言: 本章介绍自己写的基于java.util.logging的轻量级日志记录库(baseLog). 该版本的日志记录库犹如其名,baseLog,是个实现日志记录基本功能的小库,适合小型项目使用,方便 ...

  7. 深入分析Java的内置日志API(java.util.logging)(一)

    简介   任何的软件系统,日志都是非常重要的一部分.良好统一的日志规范会大大提高应用程序的可维护性.可靠性,并进而提高开发效率,指导业务.在早期,Java工程师往往都是利用 System.err.pr ...

  8. java.util.logging.Logger基础

    1. 定义 java.util.logging.Logger是Java自带的日志类,可以记录程序运行中所产生的日志.通过查看所产生的日志文件,可以分析程序的运行状况,出现异常时,分析及定位异常. 2. ...

  9. 2.java.util.logging.Logger使用详解

    一.java.util.logging.Logger简介 java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着, 其实 ...

随机推荐

  1. python“# -*- coding: UTF-8 -*-”

    python跑一趟红 python脚本文件中,python编译器是使用ascii码来解释脚本内容.如果.py源文件中包含中文,会报错(注释也报错).所以文件开头加上"# -*- coding ...

  2. 【Unity Shaders】Diffuse Shading——创建一个基本的Surface Shader

    本系列主要参考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同时会加上一点个人理解或拓展. 这里是本书所有的插图.这里是本书所需的代码和资源 ...

  3. Shell 正则表达式总结及其含义举例

    基本元字符集及其含义: ^  只匹配行首 $   只匹配行尾 *   只一个单字符后紧跟*,匹配0个或多个此单字符 [ ]   只匹配[ ]内字符.可以是一个单字符,也可以是字符序列.可以使用 - 表 ...

  4. ZooKeeper 客户端的使用

    连接zk 1 2 cd bin zkCli.sh -timeout 5000 -server 27.154.242.214:5091 输入h,回车查看帮助 1 2 3 4 5 6 7 8 9 10 1 ...

  5. 让Oracle 大小写敏感 表名 字段名 对像名

    一.解决方案 1.在表名.字段名.对象名上加上双引号,即可实现让oracle大小写区分. 2.但是这又引起了另一个问题:在数据库操作中,sql语句中相应的表名.字段名.对象名上一定要加双引号. 解决办 ...

  6. 打包volley

    1.如果电脑没有安装git和ant的话,需要安装git和ant,直接Google就可以,并配置环境变量 2.在命令行执行 git clone https://android.googlesource. ...

  7. 【UML 建模】UML建模语言入门 -- 静态图详解 类图 对象图 包图 静态图建模实战

    发现个好东西思维导图, 最近开始用MindManager整理博客 . 作者 :万境绝尘  转载请注明出处 : http://blog.csdn.net/shulianghan/article/deta ...

  8. Android群英传笔记——第六章:Android绘图机制与处理技巧

    Android群英传笔记--第六章:Android绘图机制与处理技巧 一直在情调,时间都是可以自己调节的,不然世界上哪有这么多牛X的人 今天就开始读第六章了,算日子也刚好一个月了,一个月就读一半,这效 ...

  9. 【59】Quartz+Spring框架详解

    什么是Quartz Quartz是一个作业调度系统(a job scheduling system),Quartz不但可以集成到其他的软件系统中,而且也可以独立运行的:在本文中"job sc ...

  10. 跟我一起写Makefile(转)

    这是我见过最全的Makefile编写指南:跟我一起写Makefile. PDF版本可以从这里下载得到.