秉承着某种执念我今天决定不用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. 扩展GDAL,支持CNSDTF格式(一)

    扩展GDAL,支持CNSDTF格式(一) 一.        简介 本文主要根据<中华人民共和国国家标准GB/T17798-2007--地理空间数据交换格式(Geospatialdata tra ...

  2. 小强的HTML5移动开发之路(9)——坦克大战游戏3

    来自:http://blog.csdn.net/dawanganban/article/details/17754235 上一篇我们创建了敌人的坦克和自己的坦克,接下来就应该让坦克发子弹了,我们下面来 ...

  3. UIView、UIViewLayout&nbsp;UI_01

    1.首先:在UI里面我们使用的是MRC,需要把ARC改成NO: 若学习比较吃力,可以先学习一下基础: http://blog.sina.com.cn/s/blog_814ecfa90102vuzg.h ...

  4. Windows200864位操作系统下的SQLPLUS.EXE 无法找到入口解决办法和Oracle环境变量的设置

    本机环境:Windows2008 64位中文版操作系统+Oracle11G+安装了Oracle32位和64位客户端驱动 问题起源:Path环境变量被360安全卫士优化修复后,整个给清空了,hosts文 ...

  5. 018-继承-OC笔记

    学习目标 1.[掌握]Xcode开发文档 2.[掌握]static关键字 3.[掌握]self关键字 4.[掌握]继承 5.[掌握]NSObject 6.[掌握]访问修饰符 7.[掌握]私有实例变量和 ...

  6. Oracle Applications DBA 基础(二)

    6.OAM及系统管理 2014年9月13日 20:40 参考资料: 1.Oracle Applications System Administrator's Guide - Configuration ...

  7. Callable与Future

    本文可作为传智播客<张孝祥-Java多线程与并发库高级应用>的学习笔记. 在前面写的代码中,所有的任务执行也就执行了,run方法的返回值为空. 这一节我们说的Callable就是一个可以带 ...

  8. 基于ARM-contexA9蜂鸣器驱动开发

    上次,我们写了一个LED的驱动程序,这一节,我们只需稍微改动一下就可以实现蜂鸣器的驱动,让我们来看看吧. 还是跟之前一样,先找电路图,找到电路板上对应的引脚和相关联的寄存器. 1.看电路图 (1)蜂鸣 ...

  9. ORACLE EBS AP invoice 到付款的数据流

    --1.Invoice创建时生成数据如下表 --Invoice主表 SELECT * FROM AP_INVOICES_ALL A WHERE A.INVOICE_NUM = '20111213001 ...

  10. 用xml来编写动画

    我们可以使用代码来编写所有的动画功能,这也是最常用的一种做法.不过,过去的补间动画除了使用代码编写之外也是可以使用XML编写的,因此属性动画也提供了这一功能,即通过XML来完成和代码一样的属性动画功能 ...