11.5 日志记录

可以通过Loger.getGlobal().info(xxxx);的方式来记录log。

11.5.2 高级日志

1)通过一个包名来 创建一个新的日志记录器。
private static final Logger logger = Logger.getLogger("my.learvjava.learnlog");

2)日志记录器也具有层次结构,且日志记录器的父子之间将共享某些属性,比如如果对com.mycompany设置了日志级别,那么其子记录器也会继承这个级别。
3)有以下7个日志记录器级别:
SEVER
WARNING
INFO
CONFIG
FINE
FINER
FINEST
默认值记录前三个级别。
可以使用Level.ALL来开启所有级别的记录,或者使用 Level.OFF来关闭所有级别的记录。
4)由于默认记录了info及其以上的级别,所以要使用    CONFIG, FINE, FINER, FINEST来记录那些有助于诊断,但是对程序员没有太大意义的调试信息。

5)void entering(xxx), void exiting(xxxx)将生成finer级别的日志信息。
6)可以用下面的方法来记录日志中包含的异常信息。
  1. if(xxxx){
  2. IOException e = new IOException("xxx);
  3. logger.throwing("com.mycompany.mlib.Reader", 'read", e);
  4. throw e;
  5. }
调用throwing可以记录一条finner级别的记录和一条以THROW开始的信息。


11.5.3  修改日志管理配置
    默认情况下位于e/lib/logging.properties文件内。
     如果要修改,就需要在启动的时候通过如下命令来修改:
    java     -Djava.util.logging.config.file=configfile mainjavaclass
    因为默认的日志信息是记录在java.util.logging.config.file这个静态变量中的。
    在main方法中调用System.setProperties("java.util.logging.config.file", file)不会起作用,其原因是日志管理器在vm启动过程中被初始化,他会在main之前被执行。
    可以通过在logging.properties中添加如下命令来设置日志记录级别
    .level=FINE
    
    
11.5.4 本地化
    虽然五年前我们在做我们应用程序的本地化的时候完全是靠自己想象的,但是现在回头来看,其实我们做的东西和java的本地化的思路是类似的,都是针对不同的语言提供不同的语言文件,通过key=value的文本文件的方式来提供。
    java中稍微有点区别,他允许同时存在多种语言的语言文件,只是在名字中增加语言前缀,而我们是通过将语言文件放在语言文件夹中来决定的。
    
    这也侧面说明了当编程进行到一定阶段之后,解决问题的思路是想通的。
    
    
11.5.5 处理器
    与日志记录器一样,日志处理器也有日志记录级别。对于一个要被记录的日志,他的日志级别必须高于日志记录器和处理器的阈值。
    日志管理器配置文件中记录的控制台处理器的日志级别为:
    java.util.logging.ConsoleHandler.level=INFO
    
    也可以绕过配置文件,不适用默认的处理器,而适用自定义的处理器:
 
  1. Logger logger = Logger.getLogger("com.mycompany.myapp");
  2. logger.setLevel(Level.FINE);
  3. logger.setUseParantHanler(false);
  4. Handler handler = new ConsoleHandler();
  5. handler.setLevel(Level.FINE);
  6. logger.addHandler(handler);
   要想将日志发送到其他地方,就需要添加其他的处理器。java api为此提供了两个很有用的处理器:FileHandler, SocketHandler。
  1. FileHandler fileHandler = new FileHandler();
  2. logger.addHandler(fileHandler);
    如果希望写更复杂的流处理器,就应该扩展Handler类,并自定义public/flush/close方法。
    
11.5.6 过滤器
    只需要实现Filter接口的
    boolean isLoggable(LogRecord record);
    方法,就可以定义一个自己的过滤器。
    
    记录器和处理器都可以设置过滤器,每个记录器和处理最多只能设置一个过滤器。
    
    
 11.5.7 格式化器
    实现Formatter接口,然后实现其中的 String format(LogRecord record)方法即可。
    然后在通过调用处理器的setFormater(Fomater formater)方法来设置。
    
       






Java系列:《Java核心技术 卷一》学习笔记,chapter11 记录日志的更多相关文章

  1. 我爱Java系列之《JavaEE学习笔记day12》---【缓冲流、转换流、序列/反序列化流、打印流】

    [缓冲流.转换流.序列/反序列化流.打印流] 一.缓冲流 1.字节缓冲输出流 java.io.BufferedOutputStream extends OutputStream 高效字节输出流 写入文 ...

  2. 《Java多线程编程核心技术》学习笔记

    第2章 对象及变量的并发访问 2.1 synchronized同步方法 方法内的变量为线程安全: 方法内部的变量是线程私有的 方法中有一个变量num,后面对它赋值 两个线程同时调用这个方法,对其赋不同 ...

  3. Java web与web gis学习笔记(二)——百度地图API调用

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  4. Java web与web gis学习笔记(一)——Tomcat环境搭建

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  5. Java程序猿的JavaScript学习笔记(汇总文件夹)

    最终完结了,历时半个月. 内容包含: JavaScript面向对象特性分析,JavaScript高手必经之路. jQuery源代码级解析. jQuery EasyUI源代码级解析. Java程序猿的J ...

  6. Java程序猿的JavaScript学习笔记(8——jQuery选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  7. Java程序猿的JavaScript学习笔记(3——this/call/apply)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  8. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  9. Java程序猿的JavaScript学习笔记(10—— jQuery-在“类”层面扩展)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  10. Java程序猿的JavaScript学习笔记(12——jQuery-扩展选择器)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

随机推荐

  1. win7共享文件夹给局域网

    1.设置共享   2.关闭"需要密码访问"          

  2. js地理位置获取、显示、轨迹绘制

    JS新API标准 地理定位(navigator.geolocation) 基于 html5 geolocation来获取经纬度地址 Html5 Geolocation获取地理位置信息 HTML5获取地 ...

  3. Effective Java 41 Use overloading judiciously

    The choice of which overloading to invoke is made at compile time. // Broken! - What does this progr ...

  4. 公用表表达式(CTE)引发的改变执行顺序同WHERE条件顺序引发的bug

    以下模拟一下CTE出错 /*测试环境 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyr ...

  5. 详解xml文件描述,读取方法以及将对象存放到xml文档中,并按照指定的特征寻找的方案

    主要的几个功能: 1.完成多条Emp信息的XML描述2.读取XML文档解析Emp信息3.将Emp(存放在List中)对象转换为XML文档4.在XML文档中查找指定特征的Emp信息 dom4j,jaxe ...

  6. 烂泥:ubuntu中使用virt-manager图形化新建虚拟机

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章介绍了,如何在ubuntu下安装KVM的虚拟机管理器virt-manager,这篇文章我们来介绍,如何在图形界面下使用virt-manager ...

  7. python 练习多级菜单思路

    只写了一个zj的三级菜单,后面的功能没写 #-*- coding :utf-8 -*- print """ 你可以输入省份然后根据市县输入 ""&qu ...

  8. visual studio 2013 快捷键大全

    1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪切/删除整行代码 ...

  9. 令人哭笑不得的org.hibernate.MappingException: Unknown entity

    今天处理的任务是从一套系统中分离出微信易信功能代码添加到另一套系统中..本来是一个很简单的任务,但是分离移植过去后,一运行报了个错: nested exception is org.hibernate ...

  10. node.js环境搭建

    (1)Node.js安装 Node.js安装包及源码下载地址为: https://nodejs.org/download/   , 双击下载后的安装包.msi,检查Node.js版本命令:node - ...