概述:

第1部分 创建Logger对象

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

staticLogger getLogger(String name)

查找或创建一个logger。staticLogger getLogger(String name, String resourceBundleName)

为指定子系统查找或创建一个logger。

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

下面是简单范例:

1 public classLoggingDemo {2 public static voidmain(String[] args){3 Logger logger = Logger.getLogger("LoggingDemo");4

5 try{6 System.out.println(args[0]);7 }catch(ArrayIndexOutOfBoundsException e){8 logger.warning("没有提供执行时的自变量!");9 }10 }11 }

执行结果:

第2部分 日志级别

在进行信息的记录时,依信息程序的不同,会设定不同等级的信息输出。Java log比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

可以通过操作Logger上的几个方法来得到不同等级的信息输出。如下列范例:

1 public classLoggingDemo {2 public static voidmain(String[] args){3 Logger logger = Logger.getLogger("LoggingDemo");4

5 logger.severe("严重信息");6

7 logger.warning("警示信息");8

9 logger.info("一般信息");10

11 logger.config("设定方面的信息");12

13 logger.fine("细微的信息");14

15 logger.finer("更细微的信息");16

17 logger.finest("最细微的信息");18 }19

20 }

执行结果:

此示例中config()方法及以下的信息并没有显示出来,这是因为Logger的默认等级是INFO,比这个等级更低的信息,Logger并不会将信息输出。

Logger的默认等级是定义在执行环境的属性文件logging.properties中,这个文件位于JRE安装目录的lib目录下。部分内容如下:

# 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.SimpleFormatter

Logger默认的输出媒介控制器(Handler)是java.util.logging.ConsolerHandler,也就是将信息输出至控制台。一个Logger可以拥有多个handler,每个handler可以有自己的日志级别,在通过Logger的级别限制后,实际上还要再经过handler的级别限制。所以在上面的范例中如果想要看到所有的信息,则必须同时设定Logger与!ConsoleHandler的级别。下面的范例示范了如何设定:

1 public classLoggingDemo {2 public static voidmain(String[] args){3 Logger logger = Logger.getLogger("LoggingDemo");4

5 //显示所有等级的信息

6 logger.setLevel(Level.ALL);7 ConsoleHandler consoleHandler = newConsoleHandler();8 //显示所有等级的信息

9 consoleHandler.setLevel(Level.ALL);10 //设定Handler为!ConsoleHandler

11 logger.addHandler(consoleHandler);12 logger.severe("严重信息");13 logger.warning("警示信息");14 logger.info("一般信息");15 logger.config("设定方面的信息");16 logger.fine("细微的信息");17 logger.finer("更细微的信息");18 logger.finest("最细微的信息");19 }20

21 }

执行结果:

Level.ALL表示显示所有的信息,所有这一次的执行结果可显示所有等级的信息。如果要关闭所有的信息,可以设定为Level.OFF。

Logger的Severe(),warning(),info()等方法,实际上是个便捷的方法。也可以直接使用log()方法并指定等级来执行相同的作用,如:

public classLoggingDemo {public static voidmain(String[] args){

Logger logger= Logger.getLogger("LoggingDemo");

logger.log(Level.SEVERE,"严重信息test");

}

}

结果:

第3部分 Handler

Handler对象从Logger中获取日志信息,并将这些信息导出。例如,它可将这些信息写入控制台或文件中,也可以将这些信息发送到网络日志服务中,或将其转发到操作系统日志中。

Logger默认的输出处理者是ConsoleHandler。!ConsoleHandler的输出是使用System.err对象,而信息的默认等级是INFO,这可以在JRE安装目录下lib目录的logging.properties中看到:

# Limit the message that are printed on the console to INFO and above.

java.util.logging.ConsoleHandler.level= INFO

Java SE实现了5个Handler:

(1) java.util.logging.ConsoleHandler 以System.err输出日志。

(2) java.util.logging.FileHandler 将信息输出到文件。

(3) java.util.logging.!StreamHandler以指定的!OutputStream实例输出日志。

(4) java.util.logging.!SocketHandler将信息通过Socket传送至远程主机。

(5) java.util.logging.!MemoryHandler将信息暂存在内存中。

以下代码将信息输出至文件中:

1 public classLoggingDemo {2 public static voidmain(String[] args){3 Logger logger = Logger.getLogger("LoggingDemo");4

5 try{6 FileHandler fileHandler = new FileHandler("D:\\test/3.txt");7 logger.addHandler(fileHandler);8 logger.info("测试信息");9 } catch(SecurityException e) {10 e.printStackTrace();11 } catch(IOException e) {12 e.printStackTrace();13 }14 }15

16 }

执行结果:

D:\test\3.text内容如下:

2014-11-25T10:53:49

1416884029723

0

LoggingDemo

INFO

com.ConcurrentContainer.LoggingDemo

main

1

测试信息

fileHandler默认的输出格式是XML格式。输出格式由java.util.logging.Formatter来控制,下一节详细介绍Formatter。

第4部分 Formatter

Formatter为格式化LogRecords提供支持。

一般来说,每个Handler都有关联的Formatter。Formatter接受LogRecord,并将它转换为一个字符串。

默认提供了两种Formatter:

1.java.util.logging.SimpleFormatter:标准日志格式,就是我们通常在启动一些诸如Tomcat、JBoss之类的服务器的时候经常能在控制台下看到的那种形式,就像这样:

2004-12-20 23:08:52 org.apache.coyote.http11.Http11Protocol init

信息: Initializing Coyote HTTP/1.1 on http-8080

2.java.util.logging.XMLFormatter:XML形式的日志格式,如果为Logger添加了一个new XMLFormatter(),那么就会以XML形式输出,不过更常用的是使用上面介绍的FileHandler输出到XML文件中。

从上一节的例子可知,FileHandler的默认格式是java.util.logging.XMLFormatter,而ConsolerHandler的默认格式是java.util.logging.SimpleFormatter,可以使用Handler实例的setFormatter()方法来设定信息的输出格式。例如:

fileHandler.setFormatter(new SimpleFormatter());

FileHandler的Formatter设定为SimpleFormatter,则输出的日志文件内容就是简单的文字信息,打开文件后会发现与命令行模式下看到的信息内容相同。

第5部分 自定义

1、Handler

用户可以定制自己输出媒介控制器,继承Handler即可,通常只需要实现Handler中三个未定义的抽象方法:

publish:主要方法,把日志记录写入你需要的媒介。

flush:清除缓冲区并保存数据。

close:关闭控制器。

通过重写以上三个方法可以很容易实现一个新的输出媒介控制器。

2、Formatter

除了XMLFormatter与!SimpleFormatter之外,也可以自定义日志的输出格式,只要继承抽象类Formatter,并重新定义其format()方法即可。format()方法会传入一个java.util.logging.LogRecord对象作为参数,可以使用它来取得一些与程序执行有关的信息。'

3、日志级别

Java的一个日志级别对应一个整数值,Level有9个内置的级别,分别是:

类型          对应的整数

OFF         最大整数(Integer.MAX_VALUE)

SEVERE     1000

WARNING   900

INFO         800

CONFIG      700

FINE          500

FINER        400

FINEST      300

ALL           最小整数(Integer.MIN_VALUE)

你也可以定义自己的日志级别,通过继承Level的方式,譬如:

1 /**

2 * 自定义日志级别3 * @ClassName: AlertLevel4 * TODO5 *@authorxingle6 * @date 2014-11-25 上午9:54:237 */

8 public class AlertLevel extendsLevel{9

10 /**

11 *@paramname12 *@paramvalue13 */

14 protected AlertLevel(String name, intvalue) {15 super(name,value);16 }17

18 public static voidmain(String[] args){19 Logger logger =Logger.getAnonymousLogger();20 //低于INFO(800),显示不出来,因为默认的配置 java.util.logging.ConsoleHandler.level = INFO

21 logger.log(new AlertLevel("ALERT",950), "自定义 lever!");22 }23 }

执行结果:

第6部分 Logger的层次关系

在使用Logger的静态getLogger()方法取得Logger实例时,给getLogger()方法的名称是有意义的。如果给定a,实际上将从根(Root)logger继承一些特性,像日志级别(Level)以及根logger的输出媒介控制器。如果再取得一个Logger实例,并给定名称a.b,则这次取得的Logger将继承pku这个Logger上的特性。从以下范例可以看出Logger在名称上的继承关系:

1 /**

2 * Logger的层次关系3 * @ClassName: LoggerHierarchyDemo4 * TODO5 *@authorxingle6 * @date 2014-11-25 上午10:04:547 */

8 public classLoggerHierarchyDemo {9 public static voidmain(String[] args){10 Logger onlyfunLogger = Logger.getLogger("a");11 Logger caterpillarLogger = Logger.getLogger("a.b");12 System.out.println("root logger:"+onlyfunLogger.getParent());13 System.out.println("onlyfun logger:" +caterpillarLogger.getParent().getName());14 System.out.println("caterpillar Logger:" + caterpillarLogger.getName() + "\n");15 onlyfunLogger.setLevel(Level.WARNING);16 caterpillarLogger.info("caterpillar ' info");17 caterpillarLogger.setLevel(Level.INFO);18 caterpillarLogger.info("caterpillar ' info");19 }20 }

执行结果:

getParent()方法可以取得Logger上的上层父Logger,根Logger并没有名称,所以直接调用它的toString()以取得字符串描述。当Logger没有设定等级时,则使用父Logger的等级设定,所以在上面的范例中,onlyfunLogger设定等级为WARNING时,caterpillarLogger调用info()方法时并不会有信息显示(因为WARNING等级比INFO高)。

参考 :

java的logger_java.util.logging.Logger 使用详解相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. Java自带日志工具java.util.logging.Logger

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

  9. java中logger_Java日志系统---Logger之简单入门

    Java 中自带的日志系统,今天抽空了解了一点,算是入了门,所以将自己的一些心得记录下来,以备日后查看,有兴趣的朋友,看到此文章,觉得有错误或需要添加的地方,请在下方评论留言,大家可以共同进步,谢谢: ...

最新文章

  1. 报名 | 清华大学海外学者短期讲学:数字经济创新创业课程
  2. pip安装模块警告InsecurePlatformWarning: A true SSLContext object is not available.
  3. Interview:算法岗位面试—11.07早上上海某机器人公司(上市)面试之项目考察、比赛考察、图像算法的考察等
  4. 超级智能玩具《小小机器人》|全新50种玩法,创造力之源
  5. 网络编程之 osi七层协议
  6. 爬虫实战 -- QQ空间自动点赞!太强了呀!
  7. java jdom jar_jdom jar
  8. typecho图片插件_Typecho弹窗相册插件HighSlide1.4.7更新
  9. Android利用Fiddler进行网络数据抓包
  10. 情有独钟,迷情电子三五年(七)
  11. Arcgis中山脊线,山谷线的提取,以及流域的分割
  12. 公司不让使用XShell破解版后,我准备用这种方式!
  13. Git 工作常用命令行
  14. 成都传智播客Java培训
  15. 一只青蛙一次可以跳一级或二级台阶,请问跳n级台阶有多少次跳法之斐波那契数列的非递归写法
  16. 计算机组成原理画出CPU与主存及3-8译码器之间信号线的连接问题
  17. 计算机理论导引 期末,计算机理论导引实验报告_CFG是P成员
  18. Java学习笔记 算法 Algorithms Fourth Edition
  19. 中富金石老师靠谱分析:2022年国企改革将着力于三个方向
  20. 华为、科达、海康、大华等厂家摄像头通过非标方式(RTSP)接入流媒体服务实现WEB直播与录像...

热门文章

  1. AntV G6自定义树状图TreeGraph
  2. 按键精灵_关于窗口无响应、卡屏状态的判断判定
  3. Maya(玛雅)功能细讨-Ⅱ|缓存 MASH 网络进行渲染
  4. linux中man使用技巧
  5. 师徒制 带新员工 比较有效
  6. TOOLS-sqlmap使用
  7. sqlmap的详细使用介绍
  8. 用计算器来进行计算10的几次方的问题
  9. KEGG数据库,除了pathway你还知道哪些
  10. 换新NAS不用愁,3种数据迁移方法教你轻松学会