偶然翻阅到一篇文章,注意到Java自带的Logger日志功能,特地来细细的看一看,记录一下。

1.Java自带的日志功能,默认的配置

  ①Logger的默认配置,位置在JRE安装目录下lib中的logging.properties中

  ②logging.properties日志文件内容如下:

  1. ############################################################
  2. # Default Logging Configuration File
  3. #
  4. # You can use a different file by specifying a filename
  5. # with the java.util.logging.config.file system property.
  6. # For example java -Djava.util.logging.config.file=myfile
  7. ############################################################
  8.  
  9. ############################################################
  10. # Global properties
  11. ############################################################
  12.  
  13. # "handlers" specifies a comma separated list of log Handler
  14. # classes. These handlers will be installed during VM startup.
  15. # Note that these classes must be on the system classpath.
  16. # By default we only configure a ConsoleHandler, which will only
  17. # show messages at the INFO and above levels.
  18. handlers= java.util.logging.ConsoleHandler
  19.  
  20. # To also add the FileHandler, use the following line instead.
  21. #handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
  22.  
  23. # Default global logging level.
  24. # This specifies which kinds of events are logged across
  25. # all loggers. For any given facility this global level
  26. # can be overriden by a facility specific level
  27. # Note that the ConsoleHandler also has a separate level
  28. # setting to limit messages printed to the console.
  29. .level= INFO
  30.  
  31. ############################################################
  32. # Handler specific properties.
  33. # Describes specific configuration info for Handlers.
  34. ############################################################
  35.  
  36. # default file output is in user's home directory.
  37. java.util.logging.FileHandler.pattern = %h/java%u.log
  38. java.util.logging.FileHandler.limit = 50000
  39. java.util.logging.FileHandler.count = 1
  40. java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
  41.  
  42. # Limit the message that are printed on the console to INFO and above.
  43. java.util.logging.ConsoleHandler.level = INFO
  44. java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
  45.  
  46. # Example to customize the SimpleFormatter output format
  47. # to print one-line log message like this:
  48. # <level>: <log message> [<date/time>]
  49. #
  50. # java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n
  51.  
  52. ############################################################
  53. # Facility specific properties.
  54. # Provides extra control for each logger.
  55. ############################################################
  56.  
  57. # For example, set the com.xyz.foo logger to only log SEVERE
  58. # messages:
  59. com.xyz.foo.level = SEVERE

  关于日志文件中,需要关注的第一点是:

  

  需要关注的第二点是:

  需要关注的第三点是:

  需要关注的第四点是:

2.java.util.logging.Level类设定了日志级别类的设定

可以从API看出来,出了以下的Level各个级别,还有OFF和ALL两个级别。

如果设置为Level.INFO级别的话,日志只会显示INFO以及以上的级别。

 

3.Logger的简单使用

首先明确一点,java.util.logging.Logger的初始化方法

  

  1. static Logger getLogger(String name)

name代表你的Logger名称,如果指定getLogeger相同名称,则仅会创建一个对象

  1. static Logger getLogger(String name, String resourceBundleName)

name代表你的Logger名称,resourceBundleName代表本地化的Logger名称,也就是记录到本地磁盘的日志文件中,每一条Logger的名称

接下来,看看效果:

  

  1. package com.sxd.util;
  2.  
  3. import java.util.logging.Level;
  4. import java.util.logging.Logger;
  5.  
  6. import org.junit.Test;
  7.  
  8. /**
  9. * 测试Java自带的Log日志功能
  10. * @author sxd
  11. *
  12. */
  13. public class TestLog {
  14.  
  15. @Test
  16. public void test(){
  17. Logger log1 = Logger.getLogger("log-Test");
  18. log1.setLevel(Level.INFO);
  19. Logger log2 = Logger.getLogger("log-Test");
  20. System.out.println("log1和log2是否相等:"+(log1 == log2)); //true
  21. Logger log3 = Logger.getLogger("log-test");
  22. System.out.println("log1和log3是否相等:"+(log1 == log3)); //false
  23. log3.setLevel(Level.WARNING);
  24.  
  25. log1.info("info级别打印:info级别的日志信息");
  26. log3.info("warning级别打印:info级别的日志信息"); //打印不出来
  27. log3.severe("warning级别打印:severe级别的日志信息");
  28.  
  29. }
  30. }

由此,可以证明,①设定的日志级别仅能打印到本级别以及高级别的日志信息;②同名的Logger仅会创建一个。

4.设定FileHandler,为日志本地化设定

  1. package com.sxd.util;
  2.  
  3. import java.io.IOException;
  4. import java.util.logging.ConsoleHandler;
  5. import java.util.logging.FileHandler;
  6. import java.util.logging.Level;
  7. import java.util.logging.Logger;
  8.  
  9. import org.junit.Test;
  10.  
  11. /**
  12. * 测试Java自带的Log日志功能
  13. * @author sxd
  14. *
  15. */
  16. public class TestLog {
  17.  
  18. @Test
  19. public void test() throws SecurityException, IOException{
  20. Logger log1 = Logger.getLogger("log-Test");
  21. ConsoleHandler consoleHandler = new ConsoleHandler();
  22. consoleHandler.setLevel(Level.ALL);
  23. log1.addHandler(consoleHandler);
  24.  
  25. FileHandler fileHandler = new FileHandler("d:/testLog%g.log");
  26. fileHandler.setLevel(Level.WARNING);
  27. log1.addHandler(fileHandler);
  28.  
  29. log1.info("ALL级别打印:info级别的日志信息");
  30. log1.severe("warning级别打印:severe级别日志信息");
  31.  
  32. }
  33. }

控制台:

【注意】这里控制台打印了两遍相同的日志,是因为,java默认的已经设定了一个ConsoleHandler,但是这个级别是INFO级别的。

    而程序中有重新设定了一个新的ConsoleHandler,这个级别是ALL的,两个不一样,所以都执行了打印,所以打印了两遍一模一样的。

本地日志文件:

【注意】仅打印了一个日志,这个根据代码日志级别就可以理解。

    关键日志文件是XML格式的内容,是因为上面解释了FileHandler的相关设置中,默认是XML格式

【注意2】FileHandler指定日志文件名称,有以下的规范:

5.为本地化的日志文件设置自定义的日志格式

java.util.logging.LogRecord;

java.util.logging.Formatter;

  1. package com.sxd.util;
  2.  
  3. import java.io.IOException;
  4. import java.util.logging.ConsoleHandler;
  5. import java.util.logging.FileHandler;
  6. import java.util.logging.Formatter;
  7. import java.util.logging.Level;
  8. import java.util.logging.LogRecord;
  9. import java.util.logging.Logger;
  10.  
  11. import org.junit.Test;
  12.  
  13. /**
  14. * 测试Java自带的Log日志功能
  15. * @author sxd
  16. *
  17. */
  18. public class TestLog {
  19.  
  20. @Test
  21. public void test() throws SecurityException, IOException{
  22. Logger log1 = Logger.getLogger("log-Test");
  23.  
  24. FileHandler fileHandler = new FileHandler("d:/testLog%g.log");
  25. fileHandler.setLevel(Level.WARNING);
  26. fileHandler.setFormatter(new MyFormatter());
  27. log1.addHandler(fileHandler);
  28.  
  29. log1.severe("warning级别打印:severe级别日志信息");
  30.  
  31. }
  32.  
  33. class MyFormatter extends Formatter{
  34.  
  35. @Override
  36. public String format(LogRecord record) {
  37. return record.getLoggerName()
  38. + ">>"
  39. +record.getLevel()
  40. +">>"
  41. +record.getMessage();
  42. }
  43.  
  44. }
  45.  
  46. }

=======================================到这里,告一段落=========================================

【java】java自带的java.util.logging.Logger日志功能的更多相关文章

  1. java.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger tomcat6 启动错误

    用tomcat6启动时,出现下面的错误Java.lang.NoClassDefFoundError: Lcom/opensymphony/xwork2/util/logging/Logger; Cau ...

  2. 通配置文件的方式控制java.util.logging.Logger日志输出

    转自:http://zochen.iteye.com/blog/616151 简单的实现了下利用JDK中类java.util.logging.Logger来记录日志.主要在于仿照log4j方式用配置文 ...

  3. java.util.logging.Logger日志生成过程浅析 (转)

    http://www.tuicool.com/articles/vy6Zrye ****************************************** java.util.logging ...

  4. Java日志组件1---Jdk自带Logger(java.util.logging.Logger)

    最近在看日志的一些东西,发现利用JDK自带的log也可以简单的实现日志的输出,将日志写入文件的过程记录如下: 1.新建LogUtil.Java( 里面写了几个静态方法,为log设置等级.添加log控制 ...

  5. Java日志工具之java.util.logging.Logger

    今天总结下JDK自带的日志工具Logger,虽然它一直默默无闻,但有时使用它却比较方便.更详细的信息可以查看JDK API手册,本文只是简单示例入门. 创建Logger 我们可以使用Logger的工厂 ...

  6. java.util.logging.Logger基础

    1. 定义 java.util.logging.Logger是Java自带的日志类,可以记录程序运行中所产生的日志.通过查看所产生的日志文件,可以分析程序的运行状况,出现异常时,分析及定位异常. 2. ...

  7. 2.java.util.logging.Logger使用详解

    一.java.util.logging.Logger简介 java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着, 其实 ...

  8. java.util.logging.Logger使用详解 (转)

    http://lavasoft.blog.51cto.com/62575/184492/ ************************************************* java. ...

  9. java.util.logging.Logger使用具体解释

    java.util.logging.Logger不是什么新奇东西了,1.4就有了,但是由于log4j的存在,这个logger一直沉默着,事实上在一些測试性的代码中,jdk自带的logger比log4j ...

随机推荐

  1. (总结)统计Apache或Nginx访问日志里的独立IP访问数量的Shell

    1.把IP数量直接输出显示:cat access_log_2011_06_26.log |awk '{print $1}'|uniq -c|wc -l 2.把IP数量输出到文本显示:cat acces ...

  2. PHP可变变量的简单使用

    知识点: 可变变量:简单说就是将一个变量的值用作另外一个变量的命名上,例如$a = 'b';$$a就是$b HTML代码: <!doctype html> <html> < ...

  3. POJ 2983-Is the Information Reliable

    Description The galaxy war between the Empire Draco and the Commonwealth of Zibu broke out 3 years a ...

  4. 洛谷 P1606 [USACO07FEB]荷叶塘Lilypad Pond 解题报告

    P1606 [USACO07FEB]荷叶塘Lilypad Pond 题目描述 FJ has installed a beautiful pond for his cows' aesthetic enj ...

  5. 异常:Batch update returned unexpected row count from update [0]; actual row count: 0;

    使用了hibernate的主键生成策略,而在程序中又主动去设置了主键值.<class name="ProductRegion" table="PRODUCT_REG ...

  6. BAT脚本编写教程入门提高篇

    BAT脚本编写教程入门提高篇 批处理文件的参数 批处理文件还可以像C语言的函数一样使用参数(相当于DOS命令的命令行参数),这需要用到一个参数表示符“%”. %[1-9]表示参数,参数是指在运行批处理 ...

  7. 学习ExtJS4 常用控件

    ExtJS组件配置方式介绍 1.使用逗号分隔参数列表配置组件    首先来看一个简单的逗号分隔参数列表的例子.这个例子非常简单,它用来显示信息提示框. 2.使用Json对象配置组件  接下来看一个使用 ...

  8. 基于CSOCKET的Client简单实例(转)

    原文转自 http://blog.csdn.net/badagougou/article/details/78410382 第一步:创建一个基类为CSOCKET类的新类,Cclient,并在主对话框类 ...

  9. 【原创】SSAS-引用维度与多数据源、多数据源视图引发分区错误

    背景: 最近有个项目,有32家分公司,集团总部需要取这个32家分公司数据做分析,由于每个分公司的数据都比较庞大,所以最终方案是每个分公司一个DW,在cube搭建过程中将每个公司数据作为一个分区数据的来 ...

  10. javascript原型理解一种

    http://www.jianshu.com/p/15ac7393bc1f 这个系列值得好好学习的.. // 声明构造函数 function Person(name, age) { this.name ...