JUL 日志 - 最简单易用的Java日志框架

Java日志系列——概述,JUL 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。在计算机中,日志文件是记录在操作系统或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件。记录是保持日志的行为。在最简单的情况下,消息被写入单个日志文件。自定义的继承关系取决于你的名称的层级关系}... 阅读详情

在正式的生产环境下是不能使用 System.out 进行日志记录的
因为 System.out 不能提供时间、线程、执行过程 等信息,如果要手动打印输出则会非常麻烦
而日志就帮我们把这些事给干了
接下来我们学一个最简单的日志框架 JUL

JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库

相对其他 日志框架,JUL 功能没那么强大,但是最方便使用,因此比较适合在小型应用中使用

JUL 架构

在这里插入图片描述
Logger持有若干个Handler,日志的输出操作是由Handler完成的

在Handler在输出日志前,会经过Filter的过滤,判断哪些日志级别过滤放行哪些拦截,Handler会将日
志内容输出到指定位置(日志文件、控制台等)

JUC 使用方法

		// 创建日志记录器对象
        Logger logger = Logger.getLogger("JULTest");
        // 通用方法进行日志记录
        logger.log(Level.INFO, "info msg");

在log中传入日志级别和日志信息,结果如下:

在这里插入图片描述

还可以直接调用 info 级别的方法 logger.info("info msg");

还可以使用占位符做拼接

        // 1.创建日志记录器对象
        Logger logger = Logger.getLogger("JULTest");
        
        String name = "张三";
        Integer age = 18;
        logger.log(Level.INFO, "用户信息:{0},{1}", new Object[]{name, age});

在这里插入图片描述

JUL的日志级别

JUL可以任务有9个日志级别

查看 Level 源码:

	public static final Level OFF = new Level("OFF",Integer.MAX_VALUE, defaultBundle);
    public static final Level SEVERE = new Level("SEVERE",1000, defaultBundle);
    public static final Level WARNING = new Level("WARNING", 900, defaultBundle);
    public static final Level INFO = new Level("INFO", 800, defaultBundle);
    public static final Level CONFIG = new Level("CONFIG", 700, defaultBundle);
    public static final Level FINE = new Level("FINE", 500, defaultBundle);
    public static final Level FINER = new Level("FINER", 400, defaultBundle);
    public static final Level FINEST = new Level("FINEST", 300, defaultBundle);
    public static final Level ALL = new Level("ALL", Integer.MIN_VALUE, defaultBundle);

每个级别的 Level 都会在构造时传入一个数,并且可以看到从OFF 到ALL 这个数越来越小

  • INFO - JUL默认的日志级别是 INFO ,INFO 对应的数值为800 ,那么数值大于等于800
    的日志级别是允许被执行的,而小于800 的是不允许执行的,INFO 用于记录常规的信息,比如数据库的连接信息、 IO的传递信息 、 网络的通信信息等
  • OFF - 因此当日志界别设置为OFF 时,对应的值是Integer.MAX_VALUE ,此时不会有数值更大的日志级别,也就不会有日志执行,相当于关闭了日志
  • ALL - 当日志界别为ALL时,对应的级别为 Integer.MIN_VALUE ,此时所有的日志都会执行
  • SEVERE - 错误信息 , 输出会导致程序终止的错误信息
  • WARNING - 警告信息 , 输出异常信息,不会使程序终止,但也需要注意
  • CONFIG - 配置信息,输出配置文件的加载和读取消息等
  • FINE 和 FINER 和 FINEST - DeBug 日志,记录程序的运行状态、执行流程、参数传递过程等,从FINE 到 FINEST ,记录的越来越详细

JUC 配置文件

默认配置文件

如果用户不做配置,那么JUC默认会读取 jre 文件 lib 目录下的 logging.properties 配置文件

在这里插入图片描述
在该配置文件中,我们可以看到 默认使用的执行器是 ConsoleHandler ,向控制台输出日志信息

而且制定了 level 为 INFO

下面是完整的配置文件信息(删除了所有的注释),可以看到除了 ConsoleHandler ,还配置了另外一个执行器 FileHandler 的信息,只不过 handlers= java.util.logging.ConsoleHandler 中只设置了ConsoleHandler 而没有设置 FileHandler,

handlers= java.util.logging.ConsoleHandler

.level= INFO

java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

java.util.logging.ConsoleHandler.level = INFO
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

com.xyz.foo.level = SEVERE

自定义配置文件

默认控制台输出,现在我们自定义配置文件,将日志信息输出到指定的日志文件中,并把日志级别改为ALL

修改后的 logging.properties 配置文件 如下:

handlers= java.util.logging.ConsoleHandler,java.util.logging.FileHandler

.level= ALL

## 文件处理器
# 输出日志级别
java.util.logging.FileHandler.level=ALL
# 输出日志文件路径
java.util.logging.FileHandler.pattern = D:/JULlogs/java%u.log
# 输出日志文件限制大小(50000字节)
java.util.logging.FileHandler.limit = 50000
# 输出日志文件限制个数
java.util.logging.FileHandler.count = 1
# 输出日志格式
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter

## 控制台处理器
# 输出日志级别
java.util.logging.ConsoleHandler.level = ALL
# 输出日志格式
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
  • 改变了handlers,添加了 java.util.logging.FileHandler ,将配置文件读取到日志文件中
  • 改变了.level ,将日志等级改为 ALL
  • 改变了 java.util.logging.FileHandler.pattern , 指定了日志文件的文件名和生成位置

其中 java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter 指定了生成的日志文件为XML格式

我们将配置文件放到 SpringBoot下的 resources 文件下

编写一个测试类,代码如下:

public class JULTest {

    @Test
    public void test01() throws IOException {
        // 读取自定义配置文件
        InputStream in = JULTest.class.getClassLoader().getResourceAsStream("logging.properties");
        // 获取日志管理器对象
        LogManager logManager = LogManager.getLogManager();
        // 通过日志管理器加载配置文件
        logManager.readConfiguration(in);
        Logger logger = Logger.getLogger("JULTest");
        logger.severe("severe");
        logger.warning("warning");
        logger.info("info");
        logger.config("config");
        logger.fine("fine");
        logger.finer("finer");
        logger.finest("finest");
    }

}

控制台打印结果:

在这里插入图片描述
去到指定的 D:/JULlogs 文件下,发现一个 java0.log 文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE log SYSTEM "logger.dtd">
<log>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896349</millis>
  <sequence>0</sequence>
  <logger>JULTest</logger>
  <level>SEVERE</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>severe</message>
</record>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896373</millis>
  <sequence>1</sequence>
  <logger>JULTest</logger>
  <level>WARNING</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>warning</message>
</record>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896374</millis>
  <sequence>2</sequence>
  <logger>JULTest</logger>
  <level>INFO</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>info</message>
</record>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896375</millis>
  <sequence>3</sequence>
  <logger>JULTest</logger>
  <level>CONFIG</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>config</message>
</record>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896376</millis>
  <sequence>4</sequence>
  <logger>JULTest</logger>
  <level>FINE</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>fine</message>
</record>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896376</millis>
  <sequence>5</sequence>
  <logger>JULTest</logger>
  <level>FINER</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>finer</message>
</record>
<record>
  <date>2023-08-12T14:31:36</date>
  <millis>1691821896377</millis>
  <sequence>6</sequence>
  <logger>JULTest</logger>
  <level>FINEST</level>
  <class>com.zhuyuanjie.springbootproject.test.JULTest</class>
  <method>test01</method>
  <thread>1</thread>
  <message>finest</message>
</record>
</log>

当前日志文件采用覆盖方式,如果想使用追加方式,在配置文件中添加
java.util.logging.FileHandler.append=true

Java日志框架+日志门面详解,史上最全! 1996年早期,欧洲安全电子市场项目组决定编写它自己的程序跟踪API(Tracing API)。经过不断的完善,这个API终于成为一个十分受欢迎的Java日志软件包,即Log4j。后来Log4j成为Apache基金会项目中的一员。期间Log4j近乎成了Java社区的日志标准。据说Apache基金会还曾经建议sun引入Log4j到java的标准库中,但Sun拒绝了。2002年Java1.4发布,Sun推出了自己的日志库JUL(Java Util Logging),其实现基本模仿了Log4j的实现。 阅读详情

相关推荐

TEC控制器芯片 ADN8835 中文数据手册

ADN8835是一款高集成度的单芯片TEC控制器。它包括线性电压调节模块脉冲宽度调制(PWM) 电压调节模块和两个零漂移、轨到轨斩波放大器。线性控制器和PWM驱动器用于控制H桥配置中的内部功率MOSFET。通过测量热传感器反馈电压,并使用集成的运算放大器作为比例-积分-微分(PID)补偿器来调理信号,ADN8835通过TEC驱动电流,将连接至TEC模块的激光二极管或无源组件的温度稳定到编程的目标温度。

lu2289504634的博客 9535

学习Java日志框架之——搞懂JUL(java.util.logging)

JUL全称 Java Util Logging,核心类在java.util.logging包下,它是java原生的日志框架,使用时不需要另外引用第三方的类库,相对其他的框架使用方便,学习简单,主要是使用在小型应用中。Logger:被称为记录器,应用程序通过获取Logger对象,调用其API来发布日志信息。Logger通常被认为是访问日志系统的入口程序。

秃了也弱了 3342

用STM32F103单片机控制电调制动无刷电机

用电调控制无刷电机制作遥控飞艇 蓝牙控制 调控电调 无刷电机 用电调控制无刷电机制作遥控飞艇 代码区 mian.c #include "delay.h" #include "sys.h" #include "usart.h" #include "usart3.h" #include "timer.h" #include "led.h" #include "key.h" int main(v...

子非鱼 的博客 2万+

JUL日志实现框架:配置文件

目录 前言 顶级父元素RootLogger 默认设置 ▎debug断点测试 自定义logging.properties文件 ▎ConsoleHandler 配置 ★SimpleFormatter数据转换 ▎FileHandler 配置 ✷ 存在问题:日志内容覆盖 前言 我们知道自己创建的logger对象,没有继承父元素的话,那其顶级父元素默认就是RootLogger ,它默认日志级别是info,使用的是ConsoleHandler处理器,数据转换用的是SimpleFormatt..

祝我飞黄腾达 675

PPT高清导出秘籍:如何轻松设置600dpi图片分辨率

本文详细解析了PPT导出图片模糊的根本原因,并提供了通过修改Windows注册表将导出分辨率从默认的96dpi提升至600dpi的完整教程。该方法能显著提升图片清晰度,满足学术出版与高质量印刷需求,文中还包含效果对比、进阶设置及常见问题解答。

a0b1c2d3的专栏 1315

基于紫光展锐平台的音频调用到hal层逻辑

基于紫光展锐平台的音频调用到hal层逻辑 1、数据流程图 AudioPolicyService和AudioFlinger的创建: 这两个服务都在audioserver中启动,文件路径: frameworks/av/media/audioserver/main_audioserver.cpp 从AudioFlinger和AudioPolicyService的创建,到output的打开,以及AudioFlinger开始往底层写入数据的具体流程如下图: #mermaid-svg-kjHL4XWwkQXN6NdA

weixin_55053963的博客 1355

JUL 日志 (全面,详细)

JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框 架使用方便,学习简单,能够在小型应用中灵活使用。

smilehjl 1220

从零开始:在Windows WSL中搭建Openfoam7+blastfoam2.0.0开发环境(避坑大全)

本文详细指导在Windows WSL中搭建OpenFOAM 7与BlastFOAM 2.0.0开发环境,重点解析了安装过程中的常见“坑点”,如编译模式不匹配导致的符号错误,并提供了从系统准备、软件部署到环境验证的完整解决方案,帮助开发者高效构建CFD与爆炸模拟开发平台。

stem5的博客 527

【日志框架-笔记】JUL日志框架的介绍及其使用

JUL 全称 Java Util Logging 是Java原生的日志框架,使用时不需要另外引入第三方类库,相对于其他日志框架来说使用方便,学习简单,能够在小型应用中灵活使用。

qq_63691275的博客 1472

以 DeleteRestrictions 与 inlineDelete 为核心的 Fiori Elements 表格删除机制全解

SAP Fiori elements 中删除操作的设计与实现涉及多维度考量。框架默认依据 OData 元数据判断删除能力,通过 DeleteRestrictions 注解实现行级条件控制(deletable-path)。表格支持两种删除模式:工具栏集中删除与响应式表格行内删除,但二者不建议混用。关键约束包括:行内删除仅适用于 Responsive Table,且与多选功能互斥。配置需遵循三层架构:后端能力注解、前端表格形态和运行时交互。设计上强调禁用优于隐藏的可用性原则,并需保持列表页与对象页的删除体验一致

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 153

2023,程序员的出路在哪里?

可是似乎从30岁开始这工资就没涨过,前面跳槽几次涨的薪水在30岁以后跳槽已经不管用了、定格了,这几年由于市场环境不景气,程序员竞争越来越激烈,36岁跟30拿的工资一模一样,不仅工资拿的一样,反而事情还越来越多了,这些都意味着什么?处理故障需要的通常不仅仅是写代码的能力,还需要对一个系统的全貌要有一定的掌握。虽然目前不少大型互联网企业都在进行结构性调整,但是从互联网行业发展的基本面来看,未来在产业互联网发展的过程中,IT行业和传统行业将会释放出大量的就业岗位,所以未来程序员的发展空间还是非常值得期待的。

AI天才研究院 20万+

JUL日志框架

一、概述和组件 JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用 第三方类库,相对其他日志框 架使用方便,学习简单,能够在小型应用中 灵活使用。 在JUL中有以下组件,我们先做了解,慢慢学习: Loggers:被称为记录器,应用程序通过获取Logger对象,调用其API 来来发布日志信息。Logger 通常时应用程序访问日志系统的入口程 序。 Appenders:也被称为Handlers,每个Logger都会关联一组 Handlers,Logger会将日志交给关联

weixin_43472934的博客 834

Arcgis建筑面shp由DSM和DEM获取高度拉伸并可视化

Arcgis建筑面shp由DSM和DEM获取高度拉伸并可视化

yilvyangguang520的博客 3991

java日志框架之JUL(Logging)

JUL全程,它是java原生的日志框架,使用时不需要另外引用第三方的类库相对其他的框架使用方便,学习简单,主要是使用在小型应用中Logger:被称为记录器应用程序通过获取Logger对象,调用其API来发布日志信息Logger通常被认为是访问日志系统的入口程序Handler:处理器每个Logger都会关联一个或者是一组HandlerLogger会将日志交给关联的Handler去做处理,由Handler负责将日志做记录Handler具体实现了日志的输出位置,比如可以输出到控制台或者是文件中等等。

从基础到源码解析的学习记录 2578

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【JAVA日志框架】JUL,JDK原生日志框架详解。

Java日志体系混乱?系列文章第一篇,五分钟,快速掌握JDK原生日志框架——JUL。

BugMan的博客 5198

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最详细、最全面的【Java日志框架】介绍,建议收藏,包含JUL、log4j、logback、log4j2等所有主流框架

本文为 【Java日志框架】 相关知识,对日志的概念与作用,JUL日志框架,Log4j日志框架,Logback日志框架,Log4j2日志框架,日志门面如Slf4j日志门面、JCL日志门面等进行详尽介绍~

小新要变强的博客 3919

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java日志框架JUL、JCL、Slf4j、Log4j、Log4j2、Logback 一网打尽

为什么程序需要记录日志 我们不可能实时的24小时对系统进行人工监控,那么如果程序出现异常错误时要如何排查呢?并且系统在运行时做了哪些事情我们又从何得知呢?这个时候日志这个概念就出现了,日志的出现对系统监控和异常分析起着至关重要的作用; 就拿java来说,在早期的日志都是通过System.out.println()进行记录的,但是这种方式不便于管理,所以apache最先开发了首个日志框架:log4j; 为日志框架奠定了基础; 日志框架出现的历史顺序为 : log4j → JUL → JCL → SLF4J →

叶新东老师的博客 5416

【Java日志系列】JUL日志框架

Java Util Logging (JUL) 是Java平台自带的一个日志框架,无需额外依赖第三方库即可使用。由于其集成度高、配置简单的特点,JUL在一些小型项目或初学者入门阶段非常受欢迎。本文将详细介绍JUL的基本概念、常用组件以及如何通过示例代码来理解和使用这些组件。此外,我们还会探讨如何通过配置文件来自定义日志行为,这对于实现更加灵活的日志管理至关重要。

记录了个人在学习生活中的所思所想,在反思自己的同时希望也能够帮到你 9436

Java 日志框架 JUL 详解大全

JUL(Java util logging),Java 原生日志框架,不需要引入第三方依赖包,使用简单方便。

陈皮的JavaLib 2400

日志框架(1) : 日志介绍、JUL框架

1.第一章 日志简介 1.1日志概述 只要程序员投身在实际的学习和生产环境中,就会对日志的重要性有着充分的认知,尤其是对于Web以及更高级的应用。在很多情况下,日志可能是我们了解应用如何执行的唯一方式。 但是现实是很多程序员对于日志的记录的认知比较肤浅,认为日志的记录输出是一件很简单而且会自动发生的事情,所以会经常忽略和日志相关的问题。 Java语言的强大之处就是因为它强大而且成熟的生态体系。其中包括日志框架,就有很多成熟的开源资源可以直接使用。 1.2日志文件 日志文件是用于记录系统操作事件的文件集

Guizy 1483

日志框架Log4j、JUL、JCL、Slf4j、Logback、Log4j2

日志门面技术借鉴了 JDBC 的思想,为日志系统也提供了一套门面,开发者就可以面向这些接口规范来开发,避免了直接依赖具体日志框架,因为不同的日志框架有不同的用法,所以导致在更换日志框架时就需要改动大量的代码,所以为了减少开发量,就有了日志门面技术,门面技术简单地理解就是说你的日志框架变了,但是不需要改代码,只修改依赖和配置文件即可,提高了开发效率;目前主流的日志门面技术有2种JCLSLF4J。

CVPR收割机的博客 2055

日志框架(一)JUL

一、日志的概念 1. 日志文件 日志文件是用于记录系统操作事件的文件集合,可分为事件日志和消息日志。具有处理历史数据、诊断问题的追踪以及理解系统的活动等重要作用。 在计算机中,日志文件是记录在操作系统或其他软件运行中发生的事件或在通信软件的不同用户之间的消息的文件。记录是保持日志的行为。在最简单的情况下,消息被写入单个日志文件。 许多操作系统,软件框架和程序包括日志系统。广泛使用的日志记录标准是在因特网工程任务组(IETF)RFC5424中定义的syslog。syslog标准使专用的标准化子系统能够生成,过

Zack_tzh的博客 2万+

一文详解Java日志框架JUL

JUL(Java util logging),Java原生日志框架,不需要引入第三方依赖包,使用简单方便。

华为云官方博客 1480

Java系统中常用日志框架

文章目录日志介绍日志概念日志作用Java中常用日志框架Java常用日志框架之间的关系日志门面框架日志实现框架 日志介绍 日志概念 日志:在计算机领域,日志文件(logfile)是一个记录了发生在运行中的操作系统或其他软件中的事件的文件,或者记录了在网络聊天软件的用户之间发送的消息1。 日志记录(Logging):是指保存日志的行为。最简单的做法是将日志写入单个存放日志的文件。 日志级别2:...

Frank的博客 1万+
上一篇: 自定义线程池 04 - 使用演示
下一篇: JVM - 垃圾回收机制
Fearless____
博客等级 码龄5年 14粉丝 87原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值