【java】java自带的java.util.logging.Logger日志功能

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

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

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

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

############################################################
#      Default Logging Configuration File
#
# You can use a different file by specifying a filename
# with the java.util.logging.config.file system property.
# For example java -Djava.util.logging.config.file=myfile
############################################################

############################################################
#      Global properties
############################################################

# "handlers" specifies a comma separated list of log Handler
# classes.  These handlers will be installed during VM startup.
# Note that these classes must be on the system classpath.
# By default we only configure a ConsoleHandler, which will only
# show messages at the INFO and above levels.
handlers= java.util.logging.ConsoleHandler

# To also add the FileHandler, use the following line instead.
#handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler

# Default global logging level.
# This specifies which kinds of events are logged across
# all loggers.  For any given facility this global level
# can be overriden by a facility specific level
# Note that the ConsoleHandler also has a separate level
# setting to limit messages printed to the console.
.level= INFO

############################################################
# Handler specific properties.
# Describes specific configuration info for Handlers.
############################################################

# default file output is in user‘s home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

# Limit the message that are printed on the console to INFO and above.
java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

# Example to customize the SimpleFormatter output format
# to print one-line log message like this:
#     <level>: <log message> [<date/time>]
#
# java.util.logging.SimpleFormatter.format=%4$s: %5$s [%1$tc]%n

############################################################
# Facility specific properties.
# Provides extra control for each logger.
############################################################

# For example, set the com.xyz.foo logger to only log SEVERE
# messages:
com.xyz.foo.level = SEVERE

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

  

  需要关注的第二点是:

  需要关注的第三点是:

  需要关注的第四点是:

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

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

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

 

3.Logger的简单使用

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

  

static Logger getLogger(String name) 

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

static Logger getLogger(String name, String resourceBundleName) 

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

接下来,看看效果:

  

package com.sxd.util;

import java.util.logging.Level;
import java.util.logging.Logger;

import org.junit.Test;

/**
 * 测试Java自带的Log日志功能
 * @author sxd
 *
 */
public class TestLog {

    @Test
    public void test(){
        Logger log1 = Logger.getLogger("log-Test");
        log1.setLevel(Level.INFO);
        Logger log2 = Logger.getLogger("log-Test");
        System.out.println("log1和log2是否相等:"+(log1 == log2));    //true
        Logger log3 = Logger.getLogger("log-test");
        System.out.println("log1和log3是否相等:"+(log1 == log3));    //false
        log3.setLevel(Level.WARNING);

        log1.info("info级别打印:info级别的日志信息");
        log3.info("warning级别打印:info级别的日志信息");        //打印不出来
        log3.severe("warning级别打印:severe级别的日志信息");

    }
}

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

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

package com.sxd.util;

import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.junit.Test;

/**
 * 测试Java自带的Log日志功能
 * @author sxd
 *
 */
public class TestLog {

    @Test
    public void test() throws SecurityException, IOException{
        Logger log1 = Logger.getLogger("log-Test");
        ConsoleHandler consoleHandler = new ConsoleHandler();
        consoleHandler.setLevel(Level.ALL);
        log1.addHandler(consoleHandler);

        FileHandler fileHandler = new FileHandler("d:/testLog%g.log");
        fileHandler.setLevel(Level.WARNING);
        log1.addHandler(fileHandler);

        log1.info("ALL级别打印:info级别的日志信息");
        log1.severe("warning级别打印:severe级别日志信息");

    }
}

控制台:

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

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

本地日志文件:

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

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

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

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

java.util.logging.LogRecord;

java.util.logging.Formatter;

package com.sxd.util;

import java.io.IOException;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;

import org.junit.Test;

/**
 * 测试Java自带的Log日志功能
 * @author sxd
 *
 */
public class TestLog {

    @Test
    public void test() throws SecurityException, IOException{
        Logger log1 = Logger.getLogger("log-Test");

        FileHandler fileHandler = new FileHandler("d:/testLog%g.log");
        fileHandler.setLevel(Level.WARNING);
        fileHandler.setFormatter(new MyFormatter());
        log1.addHandler(fileHandler);

        log1.severe("warning级别打印:severe级别日志信息");

    }

    class MyFormatter extends Formatter{

        @Override
        public String format(LogRecord record) {
            return record.getLoggerName()
                    + ">>"
                    +record.getLevel()
                    +">>"
                    +record.getMessage();
        }

    }

}

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

时间: 2024-12-21 23:05:54

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

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

转自:http://zochen.iteye.com/blog/616151 简单的实现了下利用JDK中类java.util.logging.Logger来记录日志.主要在于仿照log4j方式用配置文件来配置日志的输出.网络上关于如何使用java.util.logging.Logger的文章很多,但是没有完整的如何通过配置配置文件来达到控制日志输出的资料.本文的目的在于此,欢迎拍砖.   上码... 1.首先封装了个LogManager.该类的主要作用就是static块中的代码,意在读取prop

java.util.logging.Logger日志生成过程浅析

java.util.logging包中主要的类有以下几个: LogManager 存在一个单一的全局 LogManager 对象,它可用于维护 Logger 和日志服务的一组共享状态. Logger Logger 对象用来记录特定系统或应用程序组件的日志消息 LogRecord LogRecord 对象用于在日志框架和单个日志 Handler 之间传递日志请求 Handler Handler 对象从 Logger 中获取日志信息,并将这些信息导出 Formatter Formatter 为格式化

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

http://www.tuicool.com/articles/vy6Zrye ****************************************** java.util.logging包中主要的类有以下几个: LogManager 存在一个单一的全局 LogManager 对象,它可用于维护 Logger 和日志服务的一组共享状态. Logger Logger 对象用来记录特定系统或应用程序组件的日志消息 LogRecord LogRecord 对象用于在日志框架和单个日志 Ha

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

java.util.logging.Logger不是什么新奇东西了,1.4就有了,但是由于log4j的存在,这个logger一直沉默着,事实上在一些測试性的代码中,jdk自带的logger比log4j更方便. 一.创建Logger对象 static Logger getLogger(String name) 为指定子系统查找或创建一个 logger. static Logger getLogger(String name, String resourceBundleName) 为指定子系统查找或

java.util.logging.Logger基础

1. 定义 java.util.logging.Logger是Java自带的日志类,可以记录程序运行中所产生的日志.通过查看所产生的日志文件,可以分析程序的运行状况,出现异常时,分析及定位异常. 2.简单的例子 import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.text.SimpleDateFormat; import java.util.Date; i

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

http://lavasoft.blog.51cto.com/62575/184492/ ************************************************* java.util.logging.Logger使用详解 java.util.logging.Logger不是什么新鲜东西了,1.4就有了,可是因为log4j的存在,这个logger一直沉默着,其实在一些测试性的代码中,jdk自带的logger比log4j更方便. 一.创建Logger对象 static Lo

Java日志介绍(1)-java.util.logging.Logger

java.util.logging.Logger是JDK自带的日志工具,其简单实现了日志的功能,不是很完善,所以在实际应用中使用的比较少.本文直接用代码演示其使用方法,文中所使用到的软件版本:Java 1.8.0_191. package com.inspur.demo.log; import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Level; imp

java.util.logging.Logger基础教程

从JDK1.4开始即引入与日志相关的类java.util.logging.Logger,但由于Log4J的存在,一直未能广泛使用.综合网上各类说法,大致认为: (1)Logger:适用于小型系统,当日志量过大时性能有待提升.好处在于JDK集成了此类,无需引入新包.且性能也在逐步改善当中,我认为一般而言,使用Logger即可. (2)Log4J:并发性较好,性能较强,适用于大型系统. 本文介绍java.util.logging.Logger的详细用法.    1.基本概念 Logger中有2个比较

java.util.logging.Logger 使用详解

概述: 第1部分 创建Logger对象 第2部分 日志级别 第3部分 Handler 第4部分 Formatter 第5部分 自定义 第6部分 Logger的层次关系 参考 第1部分 创建Logger对象 要使用J2SE的日志功能,首先要取得java.util.logging.Logger实例,这可以通过Logger类的两个静态getLogger()方法来取得: static Logger getLogger(String name) 查找或创建一个logger. static Logger g