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. 谷歌浏览器 模拟微信浏览器user-agent

    1.F12    2.Elments->Emulation Media: Other Network:Mozilla/5.0 (Linux; Android 4.4.4; HM NOTE 1LT ...

  2. Effective Java 37 Use marker interfaces to define types

    Marker interface is an interface that contains no method declarations, but merely designates (or &qu ...

  3. js中 字符串与Unicode 字符值序列的相互转换

    一. 字符串转Unicode 字符值序列 var str = "abcdef"; var codeArr = []; for(var i=0;i<str.length;i++ ...

  4. .NET 反射的使用

    1.根据类名获取类实例 string className = "Company.BigProgram.BLL.TestClass"; Type type = Type.GetTyp ...

  5. 详解Winform里面的缓存使用

    缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力.本文主要针对自己在Winform方面的缓存使用做一个引导性的介绍,希望大家能够从中了解一些缓存 ...

  6. SSIS hang with unhandle exception

    如果你的packages在执行的过程中有没有被捕获到的异常,则sqldumper会跳出来获取这些异常信息输出,存在下面的目录中: C:\Program Files\Microsoft SQL Serv ...

  7. fiddler对手机进行抓包

    1.安装fiddler web debugger 2.Tools -->telerik fiddler options-->connections,勾选allow remote compu ...

  8. 深度优先搜索 codevs 1065 01字符串

    codevs 1065 01字符串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 输出仅有0和1组成的长度为n的字符串,并且 ...

  9. JAVA基础之对象的初始化

    本文主要记录JAVA中对象的初始化过程,包括实例变量的初始化和类变量的初始化以及 final 关键字对初始化的影响.另外,还讨论了由于继承原因,探讨了引用变量的编译时类型和运行时类型 一,实例变量的初 ...

  10. HDU 4445 Crazy Tank --枚举

    题意: n个物体从高H处以相同角度抛下,有各自的初速度,下面[L1,R1]是敌方坦克的范围,[L2,R2]是友方坦克,问从某个角度抛出,在没有一个炮弹碰到友方坦克的情况下,最多的碰到敌方坦克的炮弹数. ...