zoukankan      html  css  js  c++  java
  • 细说JDK日志组件

    1. 概述

    JDK自带的日志组件在包java.util.logging下,如图:


    2. 架构

    如上图所示,JDK日志组件核心元素包括:Logger,Handler,Filter和Formatter,他们的关系如下:
        --Logger
          --Handler
            --Filter
            --Formatter

    Handler类图:

    JDK日志组件提供Handler比较少,支持将日志输出到控制台,文件,网络。


    Formatter类图:

    JDK日志组件仅提供了2种日志格式,默认为xml格式。

    3. 通过API使用JDK日志组件

    // 通过API使用JDK日志组件
    private static void log2FileByAPI() throws SecurityException, IOException {
        // 将日志记录到文件中
        FileHandler fileHandler = new FileHandler("D:/logs/java_util_log.log", true);
        Formatter formatter = new SimpleFormatter();
        fileHandler.setFormatter(formatter);
            
        logger.addHandler(fileHandler);    
        logger.info("LOG By API");
    }


    4. 通过配置文件使用JDK日志组件

    // 通过配置文件使用JDK日志组件
    private static void log2FileByConfig() throws SecurityException, IOException {
        // 读取classpath路径下的文件
        InputStream is = JDKLogTest.class.getResourceAsStream("/jdklog.properties");
        LogManager.getLogManager().readConfiguration(is);
    
        logger.log(Level.INFO, "this is a INFO msg");
    }

    jdklog.properties配置:

    # Logging
    handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
    
    # File Logging
    java.util.logging.FileHandler.pattern = D:/logs/java_util_log.log
    java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
    java.util.logging.FileHandler.level = INFO
    java.util.logging.FileHandler.append = true
    
    # Console Logging
    java.util.logging.ConsoleHandler.level = ALL

    总结:
    JDK提供的日志组件,能满足基本的日志需求,功能比较单一:
    (1)支持的日志级别比较少: FINEST < FINER < FINE < CONFIG < INFO < WARNING < SEVERE(从低到高排序)。
    (2)允许输出日志到文件,控制台,和网络主机。
    (3)日志格式比较简单,默认输出格式为xml格式,可以指定为SimpleFormatter。

    总之,在日志需求比较简单的情况下,可以使用JDK自带的日志组件;否则,使用第三方日志组件才能满足更加复杂的需求。

  • 相关阅读:
    TransportClient基于Elasticsearch6.8.6 X-PACK
    elasticsearch6.8.6配置xpack(生成密钥)
    Java8 List排序
    ssh 免密码登录自动设置脚本
    Linux grep命令用于查找文件里符合条件的字符串
    [译]如何防止elasticsearch的脑裂问题
    APScheduler定时任务使用
    storm本地python开发环境搭建
    关于python反射的getattr,我终于想通了!
    利用sqlalchemy 查询视图
  • 原文地址:https://www.cnblogs.com/nuccch/p/6770478.html
Copyright © 2011-2022 走看看