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. Volley源码分析(1)----Volley 队列

    Android网络框架很多,但是基于Google自己的volley,无疑是优秀的一款. 网络框架,无外乎解决一下几个问题,队列,缓存,图片异步加载,统一的网络请求和处理等. 一.Volley 队列 启 ...

  2. Struts2 Spring Hibernate等各个版本下载推荐

    推荐jar包下载地址: http://mvnrepository.com/ 应有尽有

  3. Eclipse報錯:Could not find or load main class

    代碼正確,但在Eclipse中無法運行,一直報錯: Could not find or load main class

  4. Garbage Collectors – Serial vs. Parallel vs. CMS vs. G1 (and what’s new in Java 8)

    转自:http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-ja ...

  5. 测试mysql的sql语句预编译效果

    玩Oracle的都比较关注shared pool,特别是library cache,在使用了绑定变量(预编译sql)之后确实能得到很大的性能提升.现在在转Mysql之后特别是innodb很多东西都还能 ...

  6. 魔改——MFC MDI程序 定制 文档模板 运行时全部打开 禁用关闭按钮

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  7. Github学习之路-小试牛刀,练习Git 的基本操作

    一.下子windows客户端. Git 客户端下载地址:http://msysgit.github.io/ 二.打开Git Bash 命令行操作界面. 安装完成后,在开始菜单里找到“Git”-> ...

  8. javascript 特效实现(3)—— 鼠标滑过显示二级菜单效果

    1. 关键代码:使用 switch 或 if 判断语句,改变对应的二级菜单显示方式为 block 或 none function selectTabMenu(i){ switch(i){ case 7 ...

  9. MIT jos 6.828 Fall 2014 训练记录(lab 4)

    源代码参见我的github: https://github.com/YaoZengzeng/jos Part A: Multiprocessor Support and Cooperative Mul ...

  10. 【C#】1.算法温故而知新 - 简单的桶排序

    该算法的时间复杂度是O(M+N),M为桶的个数,N为待排序的个数 缺点: 1.不适用于小数 2.当数值过多,太浪费空间,比如数值范围为0~99999,那需申请100000个变量,也就是要写成a[100 ...