秉承着某种执念我今天决定不用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. (NO.00001)iOS游戏SpeedBoy Lite成形记(二十一)

    现在游戏中如果钱用光了赌场也是不管的,所以我们要加上Game Over的逻辑. 出现游戏结束条件很简单,就是GameState的totalMoney <= 0.而在游戏结束时我们要做些什么呢?有 ...

  2. hadoop namenode格式化问题汇总

    hadoop namenode格式化问题汇总 (持续更新) 0 Hadoop集群环境 3台rhel6.4,2个namenode+2个zkfc, 3个journalnode+zookeeper-serv ...

  3. 【Qt编程】基于Qt的词典开发系列<三>--开始菜单的设计

    这篇文章讲讲如何实现开始菜单(或者称为主菜单)的设计.什么是开始菜单呢?我们拿常用的软件来用图例说明,大多数软件的开始菜单在左下角,如下图: 1.window 7的开始菜单 2.有道词典的主菜单 3. ...

  4. 集团公司(嵌入ETL工具)财务报表系统解决方案

    集团公司(嵌入ETL工具)财务报表系统解决方案 一.项目背景: 某集团公司是一家拥有100多家子公司的大型集团公司,旗下子公司涉及各行各业,包括:金矿.铜矿.房产.化纤等.由于子公司在业务上的差异,子 ...

  5. UML之部署图

    部署图,英文名曰:Deployment Diagram,通常也称配置图,她是用来显示系统中软件和硬件的物理结构,从部署图中,我们可以了解到软件和硬件组件之间的物理关系以及处理节点的组件分布情况,使用部 ...

  6. 页面缓存js问题解决

     1.在jsp中加入头 <META HTTP-EQUIV="Pragma" CONTENT="no-cache">  <META HTTP ...

  7. 【Linux 操作系统】vim编辑器配置及常用命令

    最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...

  8. LeetCode之“动态规划”:House Robber && House Robber II

    House Robber题目链接 House Robber II题目链接 1. House Robber 题目要求: You are a professional robber planning to ...

  9. Spring--ApplicationContext

    //中心接口,给应用提供配置信息 public interface ApplicationContext extends EnvironmentCapable, ListableBeanFactory ...

  10. 给大家推荐一个python的学习网站 http://www.codecademy.com

    注册之后,可以跟着指导,自己编码学习,比较方面: 再推荐一个在线编译的代码网站,c/c++ python  都可以: http://codepad.org