一、Logger 的级别

比log4j的级别详细,全部定义在java.util.logging.Level里面。
各级别按降序排列如下:
SEVERE(最高值)
WARNING
INFO
CONFIG
FINE
FINER
FINEST(最低值)
此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。
logger默认的级别是INFO,比INFO更低的日志将不显示(但也会写入文件)。

注意:
高等级的Logger不会显示(或写入)低等级的记录。
低等级的Logger会显示(或写入)高等级的记录。

二、创建 Logger 对象

static Logger getLogger(String name)
为指定子系统查找或创建一个 logger。
static Logger getLogger(String name, String resourceBundleName)
为指定子系统查找或创建一个 logger。

注意:name是Logger的名称,一般使用圆点分隔的层次命名空间来命名 Logger 。
当名称相同时候,同一个名称的Logger只创建一个(不同引用指向同一logger,这意味着不同引用可以操作同一Logger)。

三、简单实例 --- 控制台打印 Logger

public class TestLogger {
public static void main(String[] args) {
//创建SEVERE级别的Logger
Logger severeLogger = Logger.getLogger("logger.severe"); //名为logger.severe
severeLogger.setLevel(Level.SEVERE);//设置logger等级 //创建WARNING级别的Logger
Logger warninglogger = Logger.getLogger("logger.warning");
warninglogger.setLevel(Level.WARNING); //创建INFO级别的Logger
Logger infoLogger = Logger.getLogger("logger.info");
infoLogger.setLevel(Level.INFO); //创建CONFIG级别的Logger
Logger configLogger = Logger.getLogger("logger.config");//比INFO等级更低的日志将不显示
configLogger.setLevel(Level.CONFIG); /*------------------------------------记录测试----------------------------------*/
infoLogger.info("这是infoLogger的记录");//记录一条INFO级别的消息
infoLogger.warning("低级能显示高级信息?");//由结果可知低级别的logger能 显示/记录 高级别的信息 warninglogger.warning("这是warninglogger的记录");
warninglogger.severe("低级能显示高级信息?");
warninglogger.info("高级能显示低级信息?");//由结果可知高级别的logger不能 显示/记录 低级别的信息 severeLogger.severe("这是severeLogger的记录");
severeLogger.warning("高级能显示低级信息?"); configLogger.config("这是configLogger的记录");//INFO等级以下的Logger不会显示 同等级/更低级 的消息 Logger testLogger1 = Logger.getLogger("logger.info");//当名称相同时候,同一个名称的Logger只创建一个
System.out.println("同名的logger是否相等:" + (infoLogger == testLogger1));
testLogger1.setLevel(Level.SEVERE);//设置成高等级
infoLogger.info("这是infoLogger的记录");
infoLogger.setLevel(Level.INFO);//再设置成低等级
infoLogger.info("这是infoLogger的记录");
}
}

输出结果:

四、Logger 的 Handler 类

Handler 对象从 Logger 中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。
可通过执行 setLevel(Level.OFF) 来禁用 Handler,并可通过执行适当级别的 setLevel 来重新启用。
Handler 类通常使用 LogManager 属性来设置 Handler 的 Filter、Formatter 和 Level 的默认值。
java.util.logging.Handler
java.util.logging.MemoryHandler
java.util.logging.StreamHandler
java.util.logging.ConsoleHandler
java.util.logging.FileHandler
java.util.logging.SocketHandler

五、简单实例 --- 写出 Logger 文件

public class TestLogger {
public static void main(String[] args) throws IOException {
//创建SEVERE级别的Logger
Logger severeLogger = Logger.getLogger("logger.severe"); //名为logger.severe
severeLogger.setLevel(Level.SEVERE);//设置logger等级 //创建WARNING级别的Logger
Logger warninglogger = Logger.getLogger("logger.warning");
warninglogger.setLevel(Level.WARNING); //创建INFO级别的Logger
Logger infoLogger = Logger.getLogger("logger.info");
infoLogger.setLevel(Level.INFO); //创建CONFIG级别的Logger
Logger configLogger = Logger.getLogger("logger.config");//比INFO等级更低的日志将不显示
configLogger.setLevel(Level.CONFIG); File logDir = new File("f:/logTest", "logDir");//创建文件对象参数:父目录,子目录
logDir.mkdirs();//创建多级目录
File logFile = new File(logDir.getAbsolutePath(),"logTest.log");//创建文件对象 FileHandler fileHandler = new FileHandler(logFile.getAbsolutePath(), 10240, 1, true);//写出日志文件,参数:路径,最大字节数,要使用的文件数,是否追加文件。(达到最大字节数后,会删掉原来所有记录,重新开始记录)
fileHandler.setLevel(Level.ALL);//同样地,高等级的FileHandler不会记录低等级的消息,ALL等级的FileHandler会记录所有等级的消息
//fileHandler.setFormatter(new MyLogFormatter());//设置自定义日志记录格式(默认是XML格式),该类在后文会提到。 infoLogger.addHandler(fileHandler);//添加Handler对象
infoLogger.info("infoLogger的info记录");//将记录写入日志文件
infoLogger.config("infoLogger的config记录");//低于logger等级的记录不会被写入日志文件 configLogger.addHandler(fileHandler);
configLogger.info("configLogger的info记录");
configLogger.config("configLogger的config记录");//如果FileHandler的等级为ALL或低于INFO,config等级的Logger也会被写入日志文件,只是不会在控制台打印出来 }
}

输出结果:(在F盘中可以找到写出的日志文件)

同样地, Logger log()方法也能进行文件的写出,这里不再赘述。

打开文件会发现,默认的日志方式是xml格式。
我们也可以自定义logger的格式。
需要用Formatter来定义。

六、Logger 的 Formatter

Formatter 为格式化 LogRecords 提供支持。
一般来说,每个日志记录 Handler 都有关联的 Formatter。
Formatter 接受 LogRecord,并将它转换为一个字符串。
LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求。

几种 Formatter :
java.util.logging.Formatter
java.util.logging.SimpleFormatter
java.util.logging.XMLFormatter

注意:
是 java.util.logging.Formatter ,要与 java.util.Formatter 区分开

七、简单实例 --- 自定义 Formatter

/**用于自定义格式化的类*/
class MyLogFormatter extends Formatter {
@Override
public String format(LogRecord record) {
return record.getSourceClassName() + ": " + record.getSourceMethodName() + ": " + record.getLevel() + ": " + record.getMessage() + "\n";
}
}

关于其他的格式化设置,可以参考API中 java.util.Formatter 这个类

输出结果:

Java程序日志:java.util.logging.Logger类的更多相关文章

  1. 【java】java自带的java.util.logging.Logger日志功能

    偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下. 1.Java自带的日志功能,默认的配置 ①Logger的默认配置,位置在JRE安装目录下lib中的logg ...

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

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

  3. 通配置文件的方式控制java.util.logging.Logger日志输出

    转自:http://zochen.iteye.com/blog/616151 简单的实现了下利用JDK中类java.util.logging.Logger来记录日志.主要在于仿照log4j方式用配置文 ...

  4. Java日志组件1---Jdk自带Logger(java.util.logging.Logger)

    最近在看日志的一些东西,发现利用JDK自带的log也可以简单的实现日志的输出,将日志写入文件的过程记录如下: 1.新建LogUtil.Java( 里面写了几个静态方法,为log设置等级.添加log控制 ...

  5. Java日志介绍(1)-java.util.logging.Logger

    java.util.logging.Logger是JDK自带的日志工具,其简单实现了日志的功能,不是很完善,所以在实际应用中使用的比较少.本文直接用代码演示其使用方法,文中所使用到的软件版本:Java ...

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

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

  7. java.util.logging.Logger基础

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

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

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

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

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

随机推荐

  1. SOLID 设计原则

    SOLID 原则基本概念: 程序设计领域, SOLID (单一功能.开闭原则.里氏替换.接口隔离以及依赖反转)是由罗伯特·C·马丁在21世纪早期 引入的记忆术首字母缩略字,指代了面向对象编程和面向对象 ...

  2. 整理下.net分布式系统架构的思路

    最近看到有部分招聘信息,要求应聘者说一下分布式系统架构的思路.今天早晨正好有些时间,我也把我们实际在.net方面网站架构的演化路线整理一下,只是我自己的一些想法,欢迎大家批评指正. 首先说明的是.ne ...

  3. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  4. Kinect开发文章目录

    整理了一下去年为止到现在写的和翻译的Kinect的相关文章,方便大家查看.另外,最近京东上微软在搞活动, 微软 Kinect for Windows 京东十周年专供礼包 ,如果您想从事Kinect开发 ...

  5. Linux Hadoop2.7.3 安装(单机模式) 一

    Linux Hadoop2.7.3 安装(单机模式) 一 Linux Hadoop2.7.3 安装(单机模式) 二 java环境安装 http://www.cnblogs.com/zeze/p/590 ...

  6. VMware下Windows Server 2012添加新磁盘

    系统管理员在VM下新装了一台Windows Server 2012服务器,我在上面安装了SQL Server 2014 Standard版数据库,安装之初,只分配了一个C盘,我想在这台服务器上添加了三 ...

  7. web标准之道——笔记

    字体设置 sans和sans-serif为通用字体,具体哪个字体被最终应用由浏览器决定,通用字体只有在其他字体都无效时才会被当作代替方案.通用字体应该放在最后面 sans衬线字体 容易阅读,一般使用在 ...

  8. 【Win 10 应用开发】导入.pfx证书

    这个功能其实并不常用,一般开发较少涉及到证书,不过,简单了解一下还是有必要的. 先来说说制作测试证书的方法,这里老周讲两种方法,可以生成用于测试的.pfx文件. 产生证书,大家都知道有个makecer ...

  9. .NET Core采用的全新配置系统[1]: 读取配置数据

    提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置定义在这两个文 ...

  10. C#:浅析结构与类的区别

    一.      结构:值类型,存储在堆栈中,位于计算机的内存逻辑区域中      类   :引用类型,存储在堆中,位于计算机内存的不同逻辑位置   二.      较小的数据使用结构:      将一 ...