Java日志系统01 ---- JUL日志

前言

当前文章只是学习笔记,具体请点击超链接:视频

简介

JUL日志是JDK自带的日志工具。无需引入任何依赖。在日常开发中并不会使用到JUL日志,仅用来作为Java日志系统的入门级学习资料,这里就不再深入探究,只进行简单使用和了解。
在这里插入图片描述

使用

  1. Maven工程Pom.xml添加编译插件,以及单元测试依赖
<dependencies>
  <dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
  </dependency>
</dependencies>

<build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
  1. 在代码中进行简单测试。可以看到控制台打印出日志了
import java.util.logging.Level;
import java.util.logging.Logger;
import org.junit.Test;

public class JULTest {

  @Test
  public void testQuick() {
    // 1. 获取日志对象。不是自己new。一般使用当前类名
    Logger logger = Logger.getLogger("com.demo.jul.JULTest");

    // 2. 输入日志
    // info级别的日志
    logger.info("info message");

    // 通用的输出方法
    logger.log(Level.INFO, "info message2");

    // 占位符号输出
    String name = "张三";
    Integer age = 30;
    logger.log(Level.INFO, "info message3,姓名:{0},年龄:{1}", new Object[]{name, age});
  }
}
  1. 对日志进行一些自定义配置。下面我们同时在两个地方输出日志信息,一个地方在控制台,第二个地方在文本文件。首先要创建一个空的文本文件d:/logs/jul.log,不然在文件中输出日志时会报找不到文件异常。
@Test
public void testConfiguration() throws IOException {
  // 1. 获取日志对象。不是自己new
  Logger logger = Logger.getLogger("com.demo.jul.JULTest");

  // 一、自定义控制台输出
  // a. 关闭系统默认配置
  logger.setUseParentHandlers(false);
  // b. 创建Handler对象
  ConsoleHandler consoleHandler = new ConsoleHandler();
  // c. 创建格式化对象
  SimpleFormatter simpleFormatter = new SimpleFormatter();
  consoleHandler.setFormatter(simpleFormatter);
  // e. 设置日志级别
  consoleHandler.setLevel(Level.ALL);
  // d. 进行关联
  logger.addHandler(consoleHandler);

  // 二、自定义文件日志输出
  FileHandler fileHandler = new FileHandler("d:/logs/jul.log");
  fileHandler.setFormatter(simpleFormatter);
  fileHandler.setLevel(Level.INFO);
  logger.addHandler(fileHandler);


  // 输出日志
  logger.setLevel(Level.ALL);
  logger.severe("severe");
  logger.warning("warning");
  logger.info("info");
  logger.config("config");
  logger.fine("fine");
  logger.finer("finer");
  logger.finest("finest");
}

日志对象的父子关系

日志对象的父子关系是按包名进行划分的。测试代码如下:

@Test
public void testParent() {
  // 创建两个日志对象
  Logger logger1 = Logger.getLogger("com.demo.jul");
  Logger logger2 = Logger.getLogger("com.demo.jul.JULTest");
  
  System.out.println("logger1的parent:" + logger1.getParent());
  System.out.println("logger2的parent:" + logger2.getParent());
  System.out.println(logger1 == logger2.getParent());
}

运行结果:
在这里插入图片描述
从输出结果可以看出,logger1的父对象是默认的根结点对象。logger2的父对象是logger1。再把父对象的日志级别设置层最高级别,子对象的日志基本使用默认日志输出级别(Info)。然后输出。从结果中可以看出子对象继承使用了父对象的设置。

public Logger createCustomerLogger(Level level, String name) {
  Logger logger = Logger.getLogger(name);
  // 一、自定义控制台输出
  // a. 关闭系统默认配置
  logger.setUseParentHandlers(false);
  // b. 创建Handler对象
  ConsoleHandler consoleHandler1 = new ConsoleHandler();
  // c. 创建格式化对象
  SimpleFormatter simpleFormatter1 = new SimpleFormatter();
  consoleHandler1.setFormatter(simpleFormatter1);
  // e. 设置日志级别
  consoleHandler1.setLevel(level);
  // d. 进行关联
  logger.addHandler(consoleHandler1);
  return logger;
}

@Test
public void testParent() {
  Logger logger1 = createCustomerLogger(Level.SEVERE, "com.demo.jul");
  Logger logger2 = Logger.getLogger("com.demo.jul.JULTest");

  logger1.severe("severe" + "-----" +logger1.getName());
  logger1.warning("warning" + "-----" +logger1.getName());
  logger1.info("info" + "-----" +logger1.getName());
  logger1.config("config" + "-----" +logger1.getName());
  logger1.fine("fine" + "-----" +logger1.getName());
  logger1.finer("finer" + "-----" +logger1.getName());
  logger1.finest("finest" + "-----" +logger1.getName());

  logger2.severe("severe" + "-----" +logger2.getName());
  logger2.warning("warning" + "-----" +logger2.getName());
  logger2.info("info" + "-----" +logger2.getName());
  logger2.config("config" + "-----" +logger2.getName());
  logger2.fine("fine" + "-----" +logger2.getName());
  logger2.finer("finer" + "-----" +logger2.getName());
  logger2.finest("finest" + "-----" +logger2.getName());
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值