zoukankan      html  css  js  c++  java
  • Java日志介绍(1)-java.util.logging.Logger

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

    1、简单使用

    package com.inspur.demo.log;
    
    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;
    
    public class JULCase {
        public static void main(String[] args) {
            try {
                Logger logger = Logger.getLogger(JULCase.class.getName());
                
                //日志保存到文件
                FileHandler fileHandler = new FileHandler("d:/temp/a.log", true); 
                fileHandler.setLevel(Level.INFO);
                //设置日志格式
                fileHandler.setFormatter(new Formatter() {
                    @Override
                    public String format(LogRecord record) {
                        return record.getLevel() + ":" + record.getMessage() + "
    ";
                    }
                });
                logger.addHandler(fileHandler); 
                
                logger.info("aaaa");
                logger.warning("bbbb");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }

    日志消息被转发到已注册的Handler对象;在默认情况下,日志消息会往上递归发送到父Logger的Handler;由于默认的最上面的父Logger设置了ConsoleHandler,所以不需要再添加ConsoleHandler了。

    该日志工具对应的配置文件为$JAVA_HOME/jre/lib/logging.properties,部分内容如下:

    # 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

    可以看到ConsoleHandler默认的级别为INFO。

    2、与SLF4J结合使用

    2.1、jul转为SLF4j

    把jul的日志转换为slf4j输出。

    a、引入jul-to-slf4j的jar包

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jul-to-slf4j</artifactId>
      <version>1.7.30</version>
    </dependency>

    b、在记录日志前加入如下代码

    SLF4JBridgeHandler.removeHandlersForRootLogger();
    SLF4JBridgeHandler.install();

    完整代码如下:

    package com.inspur.demo.log;
    
    import org.slf4j.bridge.SLF4JBridgeHandler;
    import java.util.logging.Logger;
    
    public class JULCase {
        public static void main(String[] args) {
            try {
                SLF4JBridgeHandler.removeHandlersForRootLogger();
                SLF4JBridgeHandler.install();
                Logger logger = Logger.getLogger(JULCase.class.getName());
                System.out.println(logger.getParent().getHandlers()[0]);
                
                logger.info("aaaa");
                logger.warning("bbbb");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    2.2、SLF4j绑定jul

    slf4j使用jul来输出日志;引入slf4j-jdk14的jar包即可。

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-jdk14</artifactId>
      <version>1.7.30</version>
    </dependency>

     注:jul-to-slf4j和slf4j-jdk14不能同时使用,否则会导致日志事件在SLF4J和jul之间死循环。

  • 相关阅读:
    Github 上 36 个最实用的 Vue 开源库
    C 语言快速入门,21 个小项目足矣!「不走弯路就是捷径」
    18个挑战项目带你快速入门深度学习
    Linux 运维入门到跑路书单推荐
    Python 网络爬虫的常用库汇总
    45 个常用Linux 命令,让你轻松玩转Linux!
    [新手必备]Python 基础入门必学知识点笔记
    快速入门 Python 数据分析实用指南
    18位不重复订单号
    相对路径转绝对路径
  • 原文地址:https://www.cnblogs.com/wuyongyin/p/12100885.html
Copyright © 2011-2022 走看看