一.java.util.logging.Logger简介

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

其实在一些测试性的代码中,jdk自带的logger比log4j更方便。

二.Logger的级别

比log4j的级别详细,全部定义在java.util.logging.Level里面。

各级别按降序排列如下:

· SEVERE(最高值)

· WARNING

· INFO

· CONFIG

· FINE

· FINER

· FINEST(最低值)

此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL 启用所有消息的日志记录。

logger默认的级别是INFO,比INFO更低的日志将不显示。

Logger的默认级别定义是在jre安装目录的lib下面。

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO

三.简单的实例代码

package com.my.utils;

import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger; public class LoggerLog {
public static void main(String[] args) {
//create logger
Logger logger = Logger.getLogger("LoggerLog");
logger.setLevel(Level.INFO); //create console handler
ConsoleHandler handler = new ConsoleHandler();
handler.setLevel(Level.ALL); //add console handler to logger
logger.addHandler(handler); try {
//add fileHandler
FileHandler fileHandler = new FileHandler("D:\\java\\test\\test.txt");
fileHandler.setLevel(Level.ALL); //add fileHandler to logger
logger.addHandler(fileHandler);
} catch (SecurityException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} logger.info("Start");
logger.info("Running");
logger.info("End"); } }

这时候你会发现 "Start" "Running" "End" 各在控制台上打印了两遍,是因为log输出了一次, ConsoleHandler输出了一次

在 new fileHandler 时,在文件后加参数可以控制是追加还是新建log文件。

FileHandler fh = new FileHandler(path,true).

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

检查D盘的输出日志如下:

<?xml version="1.0" encoding="GBK" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
<date>2018-03-25T20:35:42</date>
<millis>1521981342189</millis>
<sequence>0</sequence>
<logger>LoggerLog</logger>
<level>INFO</level>
<class>com.my.utils.LoggerLog</class>
<method>main</method>
<thread>1</thread>
<message>Start</message>
</record>
<record>
<date>2018-03-25T20:35:42</date>
<millis>1521981342292</millis>
<sequence>1</sequence>
<logger>LoggerLog</logger>
<level>INFO</level>
<class>com.my.utils.LoggerLog</class>
<method>main</method>
<thread>1</thread>
<message>Running</message>
</record>
<record>
<date>2018-03-25T20:35:42</date>
<millis>1521981342298</millis>
<sequence>2</sequence>
<logger>LoggerLog</logger>
<level>INFO</level>
<class>com.my.utils.LoggerLog</class>
<method>main</method>
<thread>1</thread>
<message>End</message>
</record>
</log>

可见,默认的日志方式是xml格式,我们使用日志就是为了能够清晰的看到操作的相关信息而这种格式有点多,乱所以我们要自定义logger的格式。需要用Formatter来定义。

四.定义输出日志的Formatter

package com.my.utils;

import java.text.SimpleDateFormat;
import java.util.logging.Formatter;
import java.util.logging.LogRecord; public class MyFormat extends Formatter { @Override
public String format(LogRecord log) {
// TODO Auto-generated method stub
SimpleDateFormat format = new SimpleDateFormat("YYYY-MM-dd HH:mm:ss S"); return log.getLevel() + ": " + format.format(log.getMillis())+" " + log.getMessage() +"\n";
} }

然后把 Format 添加到 fileHandler 中

fileHandler.setFormatter(new MyFormat());

这时候 输出的日志文件就是比较清晰了,可以根据项目的实际需求定义合适的Format

INFO: 2018-03-25 21:03:49 791 Start
INFO: 2018-03-25 21:03:49 909 Running
INFO: 2018-03-25 21:03:49 913 End

Formatter 为格式化 LogRecords 提供支持。 
一般来说,每个日志记录 Handler 都有关联的 Formatter。Formatter 接受 LogRecord,并将它转换为一个字符串。 
有些 formatter(如 XMLFormatter)需要围绕一组格式化记录来包装头部和尾部字符串。可以使用 getHeader 和 getTail 方法来获得这些字符串。

LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求。
LogRecord(Level level, String msg)   用给定级别和消息值构造 LogRecord。

 

2018-06-08 14:41

2019-02-14 10:41

2.java.util.logging.Logger使用详解的更多相关文章

  1. java.util.logging.Logger使用详解 (转)

    http://lavasoft.blog.51cto.com/62575/184492/ ************************************************* java. ...

  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 jdk日志详解

    jdk自带的日志,结构并不复杂,功能也能满足绝大部分功能.日志写入位置是开放的,只要继承了handler都可以接收日志的写入.handler本身依赖于LogRecord对象,该对象代表一个日志.Han ...

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

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

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

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

  7. java.util.logging.Logger基础

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

  8. java.util.logging.Logger使用具体解释

    java.util.logging.Logger不是什么新奇东西了,1.4就有了,但是由于log4j的存在,这个logger一直沉默着,事实上在一些測试性的代码中,jdk自带的logger比log4j ...

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

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

随机推荐

  1. 我的Java设计模式-责任链模式

    今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯 ...

  2. Linux基础六

    用户账号管理 基于账号身份对资源访问进行控制 账户类别:用户账号,组账号 识别方式:UID,GID 用户账号:超级用户root,系统用户,普通用户 组账号:用来区分权限,不用于登陆 基本组(私有组) ...

  3. R学习笔记(4): 使用外部数据

    来源于:R学习笔记(4): 使用外部数据 博客:心内求法 鉴于内存的非持久性和容量限制,一个有效的数据处理工具必须能够使用外部数据:能够从外部获取大量的数据,也能够将处理结果保存.R中提供了一系列的函 ...

  4. mysql字符串连接

    用SQL Server 连接字符串是用“+” 现在数据库用mysql, 写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作, ...

  5. FusionCharts for Flex的属性和事件

    FusionCharts for Flex的属性和事件 1.Properties(属性) (1)FCChartType (2)FCDataURL (3)FCDataXML (4)FCDebugMode ...

  6. MTBF

    MTBF,即平均故障间隔时间,英文全称是"Mean Time Between Failure".是衡量一个产品(尤其是电器产品)的可靠性指标.单位为"小时".它 ...

  7. JSP中的include有哪些?有什么区别?

    JSP中的include有哪些?有什么区别? 1.JSP中的include有哪些 (1)<%@include file="" %> (2)<jsp:include ...

  8. iOS - Quartz 2D 画板绘制

    1.绘制画板 1.1 绘制简单画板 PaintBoardView.h @interface PaintBoardView : UIView @end PaintBoardView.m @interfa ...

  9. sqoop将mysql连表查询结果导入hdfs文件

    sqoop import --connect jdbc:mysql://ip/数据库 --username 用户名 --password 密码 --query " select p.bidN ...

  10. 【SPOJ】NUMOFPAL - Number of Palindromes(Manacher,回文树)

    [SPOJ]NUMOFPAL - Number of Palindromes(Manacher,回文树) 题面 洛谷 求一个串中包含几个回文串 题解 Manacher傻逼题 只是用回文树写写而已.. ...