java.util.logging.Logger是JDK自带的日志工具类,从1.4版本开始就已经有了。由于log4j等开源的日志组件,这个Logger并没有太多展现机会。但在一些测试性的代码中,JDK自带的Logger比log4j等更方便。

创建Logger对象

要使用JDK的日志功能,首先要取得java.util.logging.Logger实例,这可以通过Logger类的两个静态getLogger()方法来取得:

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

name是Logger的名称,当名称相同时候,同一个名称的Logger只创建一个。

Logger的日志级别

全部定义在java.util.logging.Level里面。
各级别按降序排列如下:

  • SEVERE(最高值)
  • WARNING
  • INFO
  • CONFIG
  • FINE
  • FINER
  • FINEST(最低值)

此外,还有一个级别 OFF,可用来关闭日志记录。

使用级别 ALL 启用所有消息的日志记录。

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

比如下面这段代码:

package com.peterwanghao.samples.java.utils.java;import java.util.logging.Level;
import java.util.logging.Logger;public class LoggingDemo {public static void main(String[] args){Logger myLogger = Logger.getLogger("com.peterwanghao.LoggingDemo");myLogger.log(Level.SEVERE, "严重信息");myLogger.log(Level.WARNING, "警告信息");myLogger.log(Level.INFO, "一般信息");myLogger.log(Level.CONFIG, "设定方面的信息");myLogger.log(Level.FINE, "细微的信息");myLogger.log(Level.FINER, "更细微的信息");myLogger.log(Level.FINEST, "最细微的信息");}
}

它的执行结果如下,只看到3条日志信息:

Logger的默认级别定义是在jre安装目录的lib下面logging.properties文件中。

# 缺省的全局级别.
.level= INFO# 控制台级别
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

如果将控制台级别设置为ALL:

java.util.logging.ConsoleHandler.level = ALL

同时降低创建的Logger实例级别则可以显示出想要的内容:

package com.peterwanghao.samples.java.utils.java;import java.util.logging.Level;
import java.util.logging.Logger;public class LoggingDemo {public static void main(String[] args){Logger myLogger = Logger.getLogger("com.peterwanghao.LoggingDemo");myLogger.setLevel(Level.ALL);//设置级别为ALL,显示全部日志myLogger.log(Level.SEVERE, "严重信息");myLogger.log(Level.WARNING, "警告信息");myLogger.log(Level.INFO, "一般信息");myLogger.log(Level.CONFIG, "设定方面的信息");myLogger.log(Level.FINE, "细微的信息");myLogger.log(Level.FINER, "更细微的信息");myLogger.log(Level.FINEST, "最细微的信息");}
}

执行结果如下:

输出媒介控制器Handler

如果不想修改系统配置文件logging.properties,可以自己创建ConsolerHandler,也就是将信息输出至控制台。在自建的ConsolerHandler中调整日志级别。

package com.peterwanghao.samples.java.utils.java;import java.util.logging.ConsoleHandler;
import java.util.logging.Level;
import java.util.logging.Logger;public class LoggingDemo {public static void main(String[] args){Logger myLogger = Logger.getLogger("com.peterwanghao.LoggingDemo");myLogger.setLevel(Level.ALL);ConsoleHandler consoleHandler = new ConsoleHandler();consoleHandler.setLevel(Level.ALL);myLogger.addHandler(consoleHandler);myLogger.log(Level.SEVERE, "严重信息");myLogger.log(Level.WARNING, "警告信息");myLogger.log(Level.INFO, "一般信息");myLogger.log(Level.CONFIG, "设定方面的信息");myLogger.log(Level.FINE, "细微的信息");myLogger.log(Level.FINER, "更细微的信息");myLogger.log(Level.FINEST, "最细微的信息");}
}

执行效果跟上面一样。

日志信息除了输出到控制台外,还可以写到日志文件里,使用java.util.logging.FileHandler 将信息输出到文件。

package com.peterwanghao.samples.java.utils.java;import java.io.File;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;public class LoggingDemo {public static void main(String[] args){Logger myLogger = Logger.getLogger("com.peterwanghao.LoggingDemo");myLogger.setLevel(Level.ALL);ConsoleHandler consoleHandler = new ConsoleHandler();consoleHandler.setLevel(Level.ALL);myLogger.addHandler(consoleHandler);FileHandler fileHandler = null;try {String filePath = "E:\\" + File.separator + "logs";String logPath = "LoggingDemo.log";File fi = new File(filePath);if ((fi.exists()) && (fi.isDirectory())) {logPath = filePath + File.separator + logPath;} else if (!fi.exists()) {try {fi.mkdirs();logPath = filePath + File.separator + logPath;} catch (Exception localException) {}}fileHandler = new FileHandler(logPath, true);//true表示日志内容在文件中追加fileHandler.setLevel(Level.ALL);//级别为ALL,记录所有消息myLogger.addHandler(fileHandler);} catch (Throwable e) {System.out.println("创建文件失败!" + e.getMessage());}myLogger.log(Level.SEVERE, "严重信息");myLogger.log(Level.WARNING, "警告信息");myLogger.log(Level.INFO, "一般信息");myLogger.log(Level.CONFIG, "设定方面的信息");myLogger.log(Level.FINE, "细微的信息");myLogger.log(Level.FINER, "更细微的信息");myLogger.log(Level.FINEST, "最细微的信息");}
}

执行后会自动生成日志文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record><date>2021-12-24T17:52:38</date><millis>1640339558986</millis><sequence>0</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>SEVERE</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>严重信息</message>
</record>
<record><date>2021-12-24T17:52:39</date><millis>1640339559068</millis><sequence>1</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>WARNING</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>警告信息</message>
</record>
<record><date>2021-12-24T17:52:39</date><millis>1640339559074</millis><sequence>2</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>INFO</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>一般信息</message>
</record>
<record><date>2021-12-24T17:52:39</date><millis>1640339559076</millis><sequence>3</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>CONFIG</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>设定方面的信息</message>
</record>
<record><date>2021-12-24T17:52:39</date><millis>1640339559078</millis><sequence>4</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>FINE</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>细微的信息</message>
</record>
<record><date>2021-12-24T17:52:39</date><millis>1640339559079</millis><sequence>5</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>FINER</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>更细微的信息</message>
</record>
<record><date>2021-12-24T17:52:39</date><millis>1640339559080</millis><sequence>6</sequence><logger>com.peterwanghao.LoggingDemo</logger><level>FINEST</level><class>com.peterwanghao.samples.java.utils.java.LoggingDemo</class><method>main</method><thread>1</thread><message>最细微的信息</message>
</record>
</log>

不同的处理器可以设置不同的日志级别,接收不同的日志信息。

自定义Formatter

Formatter可以为日志信息做格式化处理。Formatter接受LogRecord,并将它转换为一个特定格式字符串。

默认提供了两种Formatter:
1.java.util.logging.SimpleFormatter:标准日志格式。

2.java.util.logging.XMLFormatter:XML形式的日志格式。

从上一节的例子可知,FileHandler的默认格式是java.util.logging.XMLFormatter,而ConsolerHandler的默认格式是java.util.logging.SimpleFormatter。

可自己设计想要的日志格式:

package com.peterwanghao.samples.java.utils.java;import java.io.File;
import java.text.SimpleDateFormat;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;public class LoggingDemo {public static void main(String[] args){Logger myLogger = Logger.getLogger("com.peterwanghao.LoggingDemo");myLogger.setLevel(Level.ALL);ConsoleHandler consoleHandler = new ConsoleHandler();consoleHandler.setLevel(Level.ALL);myLogger.addHandler(consoleHandler);FileHandler fileHandler = null;try {String filePath = "E:\\" + File.separator + "logs";String logPath = "LoggingDemo.log";File fi = new File(filePath);if ((fi.exists()) && (fi.isDirectory())) {logPath = filePath + File.separator + logPath;} else if (!fi.exists()) {try {fi.mkdirs();logPath = filePath + File.separator + logPath;} catch (Exception localException) {}}fileHandler = new FileHandler(logPath, true);//true表示日志内容在文件中追加fileHandler.setLevel(Level.ALL);//级别为ALL,记录所有消息fileHandler.setFormatter(new Formatter() {private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public String format(LogRecord record) {StringBuilder sb = new StringBuilder();String dataFormat = this.sdf.format(Long.valueOf(record.getMillis()));sb.append(dataFormat).append(" ");sb.append("level:").append(record.getLevel()).append(" ");sb.append(record.getMessage()).append("\n");return sb.toString();}});myLogger.addHandler(fileHandler);} catch (Throwable e) {System.out.println("创建文件失败!" + e.getMessage());}myLogger.log(Level.SEVERE, "严重信息");myLogger.log(Level.WARNING, "警告信息");myLogger.log(Level.INFO, "一般信息");myLogger.log(Level.CONFIG, "设定方面的信息");myLogger.log(Level.FINE, "细微的信息");myLogger.log(Level.FINER, "更细微的信息");myLogger.log(Level.FINEST, "最细微的信息");}
}

执行效果如下:

2021-12-24 18:13:44 level:SEVERE 严重信息
2021-12-24 18:13:44 level:WARNING 警告信息
2021-12-24 18:13:44 level:INFO 一般信息
2021-12-24 18:13:44 level:CONFIG 设定方面的信息
2021-12-24 18:13:44 level:FINE 细微的信息
2021-12-24 18:13:44 level:FINER 更细微的信息
2021-12-24 18:13:44 level:FINEST 最细微的信息

Java自带日志工具java.util.logging.Logger相关推荐

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

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

  2. java log写入txt文件_使用java.util.logging.Logger时如何在文本文件中写日志

    问题 我有一种情况,我想写下我创建的所有日志写入文本文件. 我们使用java.util.logging.Logger API来生成日志. 我试过了 private static Logger logg ...

  3. 利用java.util.logging.Logger输出日志

     log4j提供了非常灵活而又强大的日志功能,java运行库中的日志功能反而被忽略了.其实也是挺好用的,最重要的是,用这个的话就不再需要log4j的jar文件. 由于java.util.loggi ...

  4. tomcat 日志 java.util.logging.Logger使用 (五)

    今天将代码部署到 ubuntu上面  logging.properties文件中如果该属性设置为 .level= ALL 则在代码执行的过程中会报如下异常: 原因未知 (一般设置成INFO或以上的级别 ...

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

    java.util.logging.Logger基础教程 @(JAVA)[java] 从JDK1.4开始即引入与日志相关的类java.util.logging.Logger,但由于Log4J的存在,一 ...

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

    概述: 第1部分 创建Logger对象 要使用J2SE的日志功能,首先要取得java.util.logging.Logger实例,这可以通过Logger类的两个静态getLogger()方法来取得: ...

  7. tomcat 日志 java util logging Logger使用 (一)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 1:ja ...

  8. java 日志时间格式_java.util.logging.Logger 使用中关于时间格式的问题

    tomcat7默认的日志格式输出方法是 java.util.logging.SimpleFormatter.format 如: Apr 11, 2018 4:11:48 PM tomcat8默认的日志 ...

  9. java logging 格式化_java.util.logging.Logger使用详解 (转)

    各级别按降序排列如下: SEVERE(最高值) WARNING INFO CONFIG FINE FINER FINEST(最低值) 此外,还有一个级别 OFF,可用来关闭日志记录,使用级别 ALL ...

最新文章

  1. 北理通信男找工作的经历及心得
  2. vue + axios---封装一个http请求
  3. c++图的创建_使用 Amazon Neptune 构建基于图数据库的应用
  4. JSP、EL和JSTL-学习笔记01【JSP基础语法】
  5. 如何用计算机绘图画图,2018年《计算机绘图》考试试题及答案【完整版】.doc
  6. des加密出的字符串有特殊字符吗_纯干货分享丨内网渗透很难学吗?
  7. mysql视图执行原理_MySql中的视图 触发器 存储过程,以及事物
  8. 称重问题 —— 哪个是假币?
  9. php面向对象有哪三种访问控制模式,第三节 访问控制的实现
  10. Java期末考试编程题复习
  11. 如何下载静海区卫星地图高清版大图
  12. 最近发现一款超牛的记单词软件,分享一下
  13. Lucene(全文检索框架) 简单实例
  14. linux之hugepage
  15. UE4UMG系统入门
  16. 天玑9000和高通骁龙870哪个好
  17. logback系列之二:输出日志到文件
  18. python中遍历list的三种方式
  19. 新网(万网)账户间域名的转移
  20. C++ MFC棋牌类小游戏day1

热门文章

  1. Cura开发常用Conan命令
  2. 数据挖掘复习资料2021.12.15
  3. PPG信号和ECG信号检测血管年龄
  4. Linux下载并安装JDK1.8
  5. IDEA如何修改字体大小以及字体颜色
  6. Vuex是什么?Vuex能做什么?Vuex怎么使用?
  7. 【AI with ML】第 10 章 :创建 ML 模型以预测序列
  8. 5G应用创新发展白皮书-5G重点应用分析-智慧港口
  9. 【基于stm32f103的SHT30温湿度显示】
  10. Web日志安全分析系统实践