• java.util.logging使用笔记2


    java.util.logging是java自带的日志处理系统,其功能不如log4j/logback强大,但可以完成基本的日志需求。

    另外,如果在一个项目中使用log4j, 而这个项目引用的第3方包也使用了log4j,它们之间的配置文件会互相覆盖,导致不可预知的结果。如果第3方包将配置文件公开了,可以通过修改log4j.properties来满足自己的需求(如hadoop),如果没有公开,而是打包在jar包里面了,那就尽量不要再使用log4j了,logback也有类似问题。

    此时就可以使用java.util.logging完成基本的日志处理。

    1、定义配置文件,文件名一般为logging.properties,放在项目的根目录下,如果是maven项目,则放在src/main/resources下。

    handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler,
    java.util.logging.ConsoleHandler.level=WARNING
    java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
         
    java.util.logging.FileHandler.level=INFO
    java.util.logging.FileHandler.formatter=java.util.logging.SimpleFormatter
    java.util.logging.FileHandler.limit=1024000
    java.util.logging.FileHandler.count=10
    java.util.logging.FileHandler.pattern=/Users/liaoliuqing/mylog3.log
    java.util.logging.FileHandler.append=true

    关于这个配置文件,有个很大的坑,不能有多余的空格,比如设定日志级别是,INFO后面有一个空格,就会导致这个项无效,其它也类似。

    2、在类中使用

    package com.lujinhong.demo.log4j;
    
    import java.util.logging.Logger;
    
    public class LoggerDemo {
    	private static Logger LOG = null;
    
    	public static void main(String[] args) {
    		System.setProperty("java.util.logging.config.file",
    				"logging.properties");
    		LOG = Logger.getLogger("com.lujinhong");
    		LOG.warning("测试信息");
    		LOG.info("hello");
    	}
    
    }
    

    这里也有个坑,搞了很久,setProperty必须放在LOG的赋值之前。

    运行上面的程序,在console中输出:

    七月 24, 2015 10:59:58 上午 com.lujinhong.demo.log4j.LoggerDemo main

    警告: 测试信息

    在文件中输出:

    七月 24, 2015 10:59:58 上午 com.lujinhong.demo.log4j.LoggerDemo main
    警告: 测试信息
    七月 24, 2015 10:59:58 上午 com.lujinhong.demo.log4j.LoggerDemo main
    信息: hello

    一些注意事项:

    1、除了在代码中指定配置文件外,也可以通过-Djava.util.logging.config.file=logging.properties指定。

    甚至可以在代码中指定log相关的所有配置,而不使用配置文件,但不推荐这种方式。

    2、文件的默认输出格式为XML,必须改,很丑,真不知道java的开发人员怎么想的。

    3、其它的配置项都比较直观,其中count那个是指最多生成多少个日志文件。

  • 相关阅读:
    主流浏览器的内核私有属性css前缀
    判断一个js对象是否是Array,最准确的方法
    JavaScript的void运算符
    js闭包面试题
    请问何为混合应用 (Hybrid APP) ,与原生 Native 应用相比它的优劣势
    将闭包返回赋值给两个变量,执行这两个闭包变量
    js操作符“+”前后的类型转换
    js基本类型和基本包装类型的区别
    只能输入零和非零开头的数字的正则表达式
    将一个非匿名函数赋值给变量再执行这个非匿名函数会如何
  • 原文地址:https://www.cnblogs.com/lujinhong2/p/4672837.html
Copyright © 2020-2023  润新知