Java中的记录器 - Java日志示例

今天我们将研究Java中的Logger。Java Logger提供了java编程的日志记录。

目录[ 隐藏 ]

  • 1 Java中的记录器

    • 1.1 Java Logger
    • 1.2 Java日志记录级别
    • 1.3 Java日志处理程序
    • 1.4 Java日志记录格式化程序
    • 1.5 Logger in Java - Java日志管理器

Java中的记录器

Java Logging API在1.4中引入,您可以使用java logging API来记录应用程序消息。在这个java日志教程中,我们将学习Java Logger的基本功能。我们还将研究不同日志记录级别的Java Logger示例,日志处理程序,格式化程序,过滤器,日志管理器和日志记录配置。

Java Logger

java.util.logging.Logger 是用于在java logging API中记录应用程序消息的类。

我们可以使用非常简单的一行代码创建java Logger;


Logger logger = Logger.getLogger(MyClass.class.getName());

Java日志级别

java.util.logging.Level定义了不同级别的java日志记录。java中有七个级别的日志记录。

  1. 严重(最高)
  2. 警告
  3. 信息
  4. CONFIG
  5. 精细
  6. FINER
  7. FINEST

还有另外两个日志记录级别,OFF将关闭所有日志记录,ALL将记录所有消息。

我们可以使用以下代码设置记录器级别:


logger.setLevel(Level.FINE);

将为所有等于或大于记录器级别的级别生成日志。例如,如果将记录器级别设置为INFO,则将为INFO,WARNING和SEVERE日志记录消息生成日志。

Java日志处理程序

我们可以向java记录器添加多个处理程序,每当我们记录任何消息时,每个处理程序都会相应地处理它。Java Logging API提供了两个默认处理程序。

  1. ConsoleHandler:此处理程序将所有日志消息写入控制台
  2. FileHandler:此处理程序以XML格式将所有日志记录消息写入文件。

我们也可以创建自己的自定义处理程序来执行特定任务。要创建我们自己的Handler类,我们需要扩展java.util.logging.Handler类或其任何子类,如StreamHandler,SocketHandler等。

以下是自定义Java日志记录处理程序的示例:


package com.journaldev.log;import java.util.logging.LogRecord;
import java.util.logging.StreamHandler;public class MyHandler extends StreamHandler {@Overridepublic void publish(LogRecord record) {//add own logic to publishsuper.publish(record);}@Overridepublic void flush() {super.flush();}@Overridepublic void close() throws SecurityException {super.close();}}

Java日志格式化程序

格式化程序用于格式化日志消息。java logging API中有两个可用的格式化程序。

  1. SimpleFormatter:此格式化程序生成包含基本信息的文本消息。ConsoleHandler使用此formatter类将日志消息打印到控制台。
  2. XMLFormatter:此格式化程序为日志生成XML消息,FileHandler使用XMLFormatter作为默认格式化程序。

我们可以通过扩展java.util.logging.Formatter类并将其附加到任何处理程序来创建我们自己的自定义Formatter类。以下是一个简单的自定义格式化程序类的示例。


package com.journaldev.log;import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.LogRecord;public class MyFormatter extends Formatter {@Overridepublic String format(LogRecord record) {return record.getThreadID()+"::"+record.getSourceClassName()+"::"+record.getSourceMethodName()+"::"+new Date(record.getMillis())+"::"+record.getMessage()+"\n";}}

Java中的记录器 - Java日志管理器

java.util.logging.LogManager是读取日志记录配置,创建和维护记录器实例的类。我们可以使用此类来设置我们自己的应用程序特定配置。


LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));

以下是Java Logging API配置文件的示例。如果我们不指定任何配置,则从JRE Home lib/logging.properties文件中读取。

mylogging.properties


handlers= java.util.logging.ConsoleHandler.level= FINE# default file output is in user's home directory.
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.formatter = java.util.logging.XMLFormatter# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormattercom.journaldev.files = SEVERE

这是一个简单的java程序,显示了Java中Logger的用法。


package com.journaldev.log;import java.io.FileInputStream;
import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;public class LoggingExample {static Logger logger = Logger.getLogger(LoggingExample.class.getName());public static void main(String[] args) {try {LogManager.getLogManager().readConfiguration(new FileInputStream("mylogging.properties"));} catch (SecurityException | IOException e1) {e1.printStackTrace();}logger.setLevel(Level.FINE);logger.addHandler(new ConsoleHandler());//adding custom handlerlogger.addHandler(new MyHandler());try {//FileHandler file name with max size and number of log files limitHandler fileHandler = new FileHandler("/Users/pankaj/tmp/logger.log", 2000, 5);fileHandler.setFormatter(new MyFormatter());//setting custom filter for FileHandlerfileHandler.setFilter(new MyFilter());logger.addHandler(fileHandler);for(int i=0; i<1000; i++){//logging messageslogger.log(Level.INFO, "Msg"+i);}logger.log(Level.CONFIG, "Config data");} catch (SecurityException | IOException e) {e.printStackTrace();}}}

当您运行上面的java logger示例程序时,您会注意到CONFIG日志未在文件中打印,这是因为MyFilter类。


package com.journaldev.log;import java.util.logging.Filter;
import java.util.logging.Level;
import java.util.logging.LogRecord;public class MyFilter implements Filter {@Overridepublic boolean isLoggable(LogRecord log) {//don't log CONFIG logs in fileif(log.getLevel() == Level.CONFIG) return false;return true;}}

输出格式也与MyFormatter类定义的相同。


1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg977
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg978
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg979
1::com.journaldev.log.LoggingExample::main::Sat Dec 15 01:42:43 PST 2012::Msg980

如果我们不将自己的Formatter类添加到FileHandler,则会像这样打印日志消息。


<record><date>2012-12-14T17:03:13</date><millis>1355533393319</millis><sequence>996</sequence><logger>com.journaldev.log.LoggingExample</logger><level>INFO</level><class>com.journaldev.log.LoggingExample</class><method>main</method><thread>1</thread><message>Msg996</message>
</record>

控制台日志消息的格式如下:


Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg997
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg998
Dec 15, 2012 1:42:43 AM com.journaldev.log.LoggingExample main
INFO: Msg998

下图显示了最终的Java Logger示例项目。

Java中的记录器 - Java日志示例相关推荐

  1. java 记录考勤记录_Java中的记录器– Java记录示例

    java 记录考勤记录 Today we will look into Logger in Java. Java Logger provides logging in java programming ...

  2. Thrift介绍以及Java中使用Thrift实现RPC示例

    场景 Thrift Thrift最初由Facebook研发,主要用于各个服务之间的RPC通信,支持跨语言,常用的语言比如C++, Java, Python,PHP, Ruby, Erlang,Perl ...

  3. Java中的正则表达式 - Java Regex示例

    Java中的正则表达式 - Java Regex示例 欢迎使用Java中的正则表达式.它在Java中也称为Regex.当我开始编程时,java正则表达式对我来说是一场噩梦.本教程旨在帮助您掌握Java ...

  4. java中 数组声明,java数组声明格式

    java 声明动态数组,java对象数组详解,java中声明数组,java数组声明格式 Java 中数组的声明一维数组的声明: 在 Java 中,数组是独立的对象,有自身的方法,不是变量的集合. 数组 ...

  5. Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...

    在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是().A.java.appletB.java.awtC.j 更多相关问题 问卷星是一个专业.无限制的免费在线问卷调查.测评. ...

  6. functor_纯Java中的Functor和Monad示例

    functor 本文最初是我们使用RxJava进行React式编程的附录. 但是,尽管与React式编程非常相关,但对monad的介绍却不太适合. 因此,我决定将其取出并作为博客文章单独发布. 我知道 ...

  7. stopwatch_在Java中衡量执行时间– Spring StopWatch示例

    stopwatch 有两种方法可以通过使用System.currentTimeinMillis()或使用System.nanoTime() 来测量Java中经过的执行时间 . 这两个方法可用于测量 J ...

  8. 纯Java中的Functor和Monad示例

    本文最初是我们使用RxJava进行反应式编程的附录. 但是,尽管与反应式编程非常相关,但对monad的介绍却不太适合. 因此,我决定将其取出并作为博客文章单独发布. 我知道," 我自己的,对 ...

  9. Java中的中介器设计模式-示例教程

    中介者模式是行为设计模式之一 ,因此它处理对象的行为. 中介器设计模式用于在系统中不同对象之间提供集中式通信介质. 根据GoF,中介者模式意图是: 通过封装不同对象集相互交互和通信的方式,允许松散耦合 ...

最新文章

  1. 正则表达式和re模块知识点汇总
  2. 【Android 插件化】静态分析应用 APK 安装包是否使用了插件化引擎 ( 虚拟化引擎运行特点 | 恶意软件特点 )
  3. [YTU]_2613( 距离产生美)
  4. 《系统集成项目管理工程师》必背100个知识点-11系统集成供应商内部立项的原因和内容
  5. 揭秘ThreadLocal
  6. 问题 C: PK没有女朋友(判断是否存在1个三元环,dfs)
  7. 2021 npm安装Electron失败解决方法
  8. 2021年四川省副高考试成绩查询,2021年四川省教育考试院成绩查询登录入口
  9. iClock时间菜单功能设置
  10. ubuntn安装qt5.12.10
  11. 405.十六进制数 (力扣leetcode) 博主可答疑该问题
  12. JMETER录制脚本,脚本增强,参数化,作用域和执行顺序
  13. Voxengo音频插件合集:Voxengo Total Bundle Mac
  14. 李雅普诺夫稳定性定理
  15. 最受欢迎的9个前端UI框架
  16. 找不到项目 该项不在计算机中,Win7提示“找不到该项目”怎么办 Win7提示“找不到该项目”解决方法...
  17. linux删除文件历史如何查看,如何恢复误删除的Linux文件
  18. 入门全栈Java程序员——CSS
  19. IPA分析——吉凯基因避坑指南
  20. 洛谷——P2342 叠积木

热门文章

  1. Node.js: NPM 使用介绍
  2. Linux Shell脚本入门教程系列之(二)第一个shell脚本
  3. Ubuntu 16.04: 开启wifi设置 How To Enable WiFi In Ubuntu 16.04
  4. 两个SEO技巧让你的网站排名靠前
  5. 认识Javascript数组
  6. 人工智障学习笔记——机器学习(9)最大期望算法
  7. C++ const用法 尽可能使用const
  8. 【vim小记】vim的复制粘贴(包括系统剪贴板)
  9. JVM——Java对象是如何创建、存储和访问的?
  10. 让媒体播放控件,播放媒体 0201