Java 日志(Logging)如何创建和捕获日志消息和文件

Java允许我们通过日志记录过程来创建和捕获日志消息和文件。
在Java中,日志记录需要框架和API。Java在java.util.logging程序包中具有内置的日志记录框架。
Java 日志组件
下图显示了Java Logging API(java.util.logging)的核心组件和指定流程。Java日志流程图:


Logger
Logger类提供了日志记录的方法。我们可以从Logger类中实例化对象并调用其方法以进行记录。
让我们举个实例。
Logger logger = Logger.getLogger("newLoggerName");
Logger类的getLogger()方法用于查找或创建新的Logger。 字符串参数定义logger的名称。
在这里,这将创建一个新Logger对象或返回一个具有相同名称的Logger对象。
按照惯例,使用class.getName()在当前类之后定义一个Logger。
Logger logger = Logger.getLogger(MyClass.class.getName());
注意:如果传递的名称为null,该方法将抛出NullPointerException。
每个Logger都有确定日志消息重要性的级别。有7个基本日志级别:

每个日志级别都有一个整数值,用来确定它们的严重性,除了两个特殊的日志级别OFF和ALL之外。
日志消息
默认情况下,始终会记录前三个日志级别。要设置其他级别,我们可以使用以下代码:
logger.setLevel(Level.LogLevel);
示例:
logger.setLevel(Level.FINE);
在本示例中,只有Level.FINE和它之上的级别被设置为日志记录。删除所有其他日志消息。
现在要记录一条日志消息,我们使用该log()方法。
logger.log(Level.LogLevel, "log message");
// 示例
logger.log(Level.INFO, "This is INFO log level message");
有一些用于记录所需级别的速记方法。
logger.info( "这是INFO日志级别的消息");
logger.warning( "这是WARNING日志级别的消息");
然后,已通过设置的日志级别的所有日志请求都将转发到LogRecord。
注意:如果一个日志记录器的级别被设置为null,那么它的级别将从其父继承,以此类推。
筛选器(Filter)
过滤器(如果存在)决定LogRecord是否转发该日志记录。顾名思义,它根据特定的标准过滤日志消息。
如果LogRecord通过指定的条件,则仅从记录器传递到日志处理程序,并从日志处理程序传递到外部系统。
// 设置filter
logger.setFilter(filter);// 获取 filter
Filter filter = logger.getFilter();
处理程序(输出源)
日志处理程序或附加程序将接收LogRecord并将其导出到各种目标。
Java SE提供了5个内置处理程序:

处理程序可以将LogRecord传递到过滤器,以再次确定是否可以将其转发到外部系统。
要添加新的处理程序,我们使用以下代码:
logger.addHandler(handler);// 示例
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
要删除处理程序,我们使用以下代码:
logger.removeHandler(handler);// 示例
Handler handler = new ConsoleHandler();
logger.addHandler(handler);
logger.removeHandler(handler);
一个记录器可以有多个处理程序。要获取所有处理程序,我们使用以下代码:
Handler[] handlers = logger.getHandlers();
4.格式化程序(Formatter)
处理程序还可以使用Formatter将LogRecord对象格式化为字符串,然后再将其导出到外部系统。
Java SE具有两个内置的Formatter:

我们可以使用以下代码来格式化处理程序:
// 格式化成字符串形式
handler.setFormatter(new SimpleFormatter());// 格式化成XML格式
handler.setFormatter(new XMLFormatter());
日志管理器
日志管理对象跟踪的全球记录的信息。它读取并维护日志记录配置和记录器实例。
日志管理器是单例,这意味着仅实例化了一个实例。
要获取日志管理器实例,我们使用以下代码:
LogManager manager = new LogManager();
日志的优点
这是使用Java 日志的一些优点。
帮助监控程序的流程
帮助捕获可能发生的任何错误
为问题诊断和调试提供支持
给大家分享一个好用的日历插件代码:
<configuration debug="false"><!-- 定义⽇志⽂件的存储地址 --><property name="LOG_HOME" value="/home"/><!-- 控制台输出 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncode r"><!-- 格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:⽇志消息,%n是换⾏符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logge r{50} - %msg%n</pattern></encoder></appender><!-- 按照每天⽣成⽇志⽂件 --><appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAp pender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRolling Policy"><!-- ⽇志⽂件输出的⽂件名 --><FileNamePattern>/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern><!-- ⽇志⽂件保留天数 --><MaxHistory>30</MaxHistory></rollingPolicy><encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncode r"><!-- 格式化输出:%d表示⽇期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:⽇志消息,%n是换⾏符 --><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logge r{50} - %msg%n</pattern></encoder><!-- ⽇志⽂件最⼤的⼤⼩ --><triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTrig geringPolicy"><MaxFileSize>100MB</MaxFileSize></triggeringPolicy></appender><!-- mybatis log configure --><logger name="com.apache.ibatis" level="TRACE"/><logger name="java.sql.Connection" level="DEBUG"/><logger name="java.sql.Statement" level="DEBUG"/><logger name="java.sql.PreparedStatement" level="DEBUG"/><!-- ⽇志输出级别,logback⽇志级别包括五个:TRACE < DEBUG < INFO < WARN < ERROR --><root level="DEBUG"><appender-ref ref="STDOUT"/><appender-ref ref="FILE"/></root>
</configuration>
相关文章:
Java 日志(Logging)如何创建和捕获日志消息和文件
Java允许我们通过日志记录过程来创建和捕获日志消息和文件。 在Java中,日志记录需要框架和API。Java在java.util.logging程序包中具有内置的日志记录框架。 Java 日志组件 下图显示了Java Logging API(java.util.logging)的核心组件和指定…...
em3288 linux_4.19 lvds+tp调试
一、显示配置\rk3288_linux4.19\kernel\arch\arm\boot\dts\rk3288-evb-act8846.dtspanel {compatible "simple-panel";backlight <&backlight>;bus-format <MEDIA_BUS_FMT_RGB666_1X18>;enable-gpios <&gpio1 24 GPIO_ACTIVE_HIGH>;ena…...
Linux 之 systemctl
systemctl 可以控制软件(一般指服务)的启动、关闭、开机自启动 能被systemctl 管理的软件,一般也称 服务 系统内置服务均可被 systemctl 控制第三方软件,如果 自动注册了 可被systemctl 控制第三方软件,如果没有自动…...
【技巧】通过 CMD 走代理下载 Vue
通过 CMD 走代理下载 Vue 在学习或者工作中,有时上网走的是代理模式,就是在浏览器里面配置代理服务的那种。后来在下载 Vue 组件的时候显示请求超时。此时才发先,浏览器代理只能在浏览器里生效,cmd 中不生效,那该怎么办…...
VSCode C/C++多文件编译配置
多文件编译备忘,带注释的地方都需要注意!!! launch.json文件 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid830387&quo…...
Autosar通信入门系列05-聊聊一帧Can/CanFD报文发送时间?
本文框架 1. 概述2. 一帧CAN报文发送时间计算3. 一帧CanFD报文的传输时间计算3.1 标准CAN与CANFD两者间的区别3.2 CANFD报文传输时间计算 1. 概述 本篇我们一起看下一帧Can报文发送需要多长时间,下述文章里我们会首先计算下Can分别对应的字节数,再根据传…...
【phaser微信抖音小游戏开发002】hello world!
执行效果: 将以下代码文本内容,放入到game.js中即可。目录结构如下图 import ./js/libs/weapp-adapter import ./js/libs/symbolGameGlobal.window.scrollTo () > { };//防止真机出错 import Phaser from ./js/phaser//引入Phaservar {windowWidth, …...
2023.07.29 驱动开发DAY6
通过epoll实现一个并发服务器 服务器 #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/epoll.h…...
网工必须掌握的5种组网技术,你会了吗?
作者:Insist-- 个人主页:insist--个人主页 作者会持续更新网络知识和python基础知识,期待你的关注 目录 一、VLAN技术 1、VLAN是什么? 2、VLAN的作用 ①提高网络安全性 ②提高了网络的灵活性性 ③增强了网络的健壮性 二、D…...
webpack中文文档
基本安装 首先我们创建一个目录,初始化 npm,然后 在本地安装 webpack,接着安装 webpack-cli(此工具用于在命令行中运行 webpack): mkdir webpack-demo cd webpack-demo npm init -y npm install webpack …...
【Linux指令篇】--- Linux常用指令汇总(克服指令繁杂问题)
文章目录 前言🌟一、Linux基本指令🌟二、ls指令🌏2.1.语法:🌏2.2.功能:🌏2.3.常用选项: 🌟三、pwd指令🌏3.1.语法:🌏3.2.功能…...
硬盘的分类
目前常见的硬盘种类主要有以下2种: 机械硬盘(HDD) 机械硬盘(HDD)是一种利用旋转磁盘和读写头来存储和访问数据的存储设备。它由磁盘、读写头、电机和控制电路等组成,磁盘通常是一种铝合金或玻璃材质的圆盘&…...
el-upload批量手动上传,并用form表单校验上传文件
手动上传设置:auto-upload"false" <el-formref"formData"class"formWidth":model"formData"label-width"120px":rules"rules"><el-form-itemlabel"数据"class"uploadClass"required…...
牛客网Verilog刷题——VL52
牛客网Verilog刷题——VL52 题目答案 题目 请编写一个十进制计数器模块,当mode信号为1,计数器输出信号递增,当mode信号为0,计数器输出信号递减。每次到达0,给出指示信号zero。模块的接口信号图如下: 模块的…...
4-7月预测价差方向准确率统计
月度 预测价差方向准确率 4月 33.6% 5月 28.4% 6月 25.7% 7月 34.2% 4-7月合计 30.6% 准确率计算公式: 其中, D:价差方向预测值(1:实时>日前,0:实时日前,-1:实时<日前&#x…...
《Vue3+Typescript》一个简单的日历组件实现
这是一个没有套路的前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~ 主页: oliver尹的主页 格言: 跌倒了爬起来就好~ 目录 一、…...
第一章 修学旅行
前言 翻了翻文章回收站,好怀念靖和阳的故事啊(航和颜:还有我们别忘啦) 不知道还有没有人记得以前的故事呢…… 那么,我就开始写啦。这是关于密码学的一篇文章,一共2696字:D(累死我…...
如果你也能认识并使用这个低代码平台,那真的是泰酷辣——iVX低代码平台
低代码技术起源是比较悠久的了,尤其是在近些年,随着技术的演进,低代码平台逐渐成为热门趋势。这些平台通过简化应用程序开发流程,减少手动编码,使非专业开发人员也能快速构建复杂应用。为我们的敏捷开发和高效生产贡献…...
uC-OS2 V2.93 STM32L476 移植:系统移植篇
前言 上一篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG STM32L476RG 的 裸机工程,并且下载了 uC-OS2 V2.93 的源码,接下来,开始系统移植 开发环境 win10 64位 Keil uVision5,MDK V5.36 uC-OS2 V2.93 开发板:NUC…...
gitee修改代码提交操作步骤说明
一,简介 本文主要介绍如何从gitee仓库下载文件,本地修改,本地提交,然后再push到远程服务器的操作步骤。供参考,欢迎一起讨论交流~ 二,操作步骤 总的操作步骤分为以下几步 1,远程服务器下载文…...
保姆级图解:ARM CHI协议里的Credit机制,到底是怎么防止芯片“堵车”的?
ARM CHI协议中的Credit机制:芯片互连的智能交通控制系统 想象一下早高峰时段的城市交通——如果没有红绿灯和匝道流量控制,整个道路系统将在几分钟内陷入瘫痪。类似地,在现代多核处理器和芯片间互连架构中,Credit机制正是扮演着这…...
突破安卓HTTPS抓包困境:Xposed+JustTrustMe框架实战指南
1. 为什么HTTPS抓包在安卓上这么难? 最近几年做安全测试的朋友应该深有体会,安卓应用的HTTPS抓包越来越难搞了。我刚开始接触这块时也踩了不少坑,明明在浏览器里能轻松抓到的HTTPS请求,到了APP里就死活抓不到。后来才发现…...
用Multisim 14.2仿真一个可调直流稳压电源:从变压器选型到波形调试全流程
Multisim 14.2仿真可调直流稳压电源:从元器件选型到波形优化的实战指南 在电子工程领域,仿真软件已经成为设计和验证电路不可或缺的工具。对于初学者而言,通过仿真可以快速理解电路原理、验证设计思路,而无需担心元器件损坏或安全…...
免费开源神器OpenMS:质谱数据分析的完整解决方案
免费开源神器OpenMS:质谱数据分析的完整解决方案 【免费下载链接】OpenMS The codebase of the OpenMS project 项目地址: https://gitcode.com/gh_mirrors/op/OpenMS 你是否正在寻找一款强大的开源工具来处理复杂的质谱数据?OpenMS正是你需要的质…...
从概念到工具:实战构建基于clawhub skill的个人技能管理体系
最近在整理自己的技能树时,发现需要一个能直观管理个人技术栈的工具。尝试用clawhub skill框架搭建了一套解决方案,配合InsCode(快马)平台的快速部署能力,三天就做出了可实际使用的技能看板。记录下关键实现思路,或许对同样想系统…...
手把手教你用QQbot对接多青龙面板(含CK分配技巧)
手把手教你用QQbot对接多青龙面板(含CK分配技巧) 在自动化管理工具日益普及的今天,如何高效管理多个青龙面板成为许多开发者的痛点。本文将带你从零开始,通过QQbot实现多青龙面板的智能对接,并深入探讨Cookieÿ…...
ai辅助开发:借助快马ai模型为直播应用添加弹幕情感分析与摘要生成功能
最近在开发一个直播应用时,发现弹幕互动是直播体验的重要组成部分,但海量弹幕中往往隐藏着观众的真实反馈和直播亮点。于是尝试用AI技术来增强直播应用的智能化功能,这里分享一下如何快速实现一个弹幕情感分析与摘要生成的工具页面。 项目构思…...
PyTorch 2.8镜像精彩案例分享:使用AnimateDiff生成动漫风格短视频合集
PyTorch 2.8镜像精彩案例分享:使用AnimateDiff生成动漫风格短视频合集 1. 开箱即用的高性能深度学习环境 PyTorch 2.8深度学习镜像为创作者和开发者提供了一个强大的工具箱,特别适合需要生成高质量视频内容的场景。这个经过深度优化的环境基于RTX 4090…...
剪映高级感文字动画素材合集 预设+教程全整理
平时做口播视频时,总觉得文字动画的精致度跟不上内容节奏,找适配的素材又要花不少时间,所以最近整理了一份剪映高级感口播动态文字动画素材合集,涵盖预设、教程和配套排查资料,今天分享给有同样需求的朋友。 一、素材合…...
Claude Code助手对比:百川2-13B在代码生成与解释方面的能力展示
Claude Code助手对比:百川2-13B在代码生成与解释方面的能力展示 最近和几个做开发的朋友聊天,大家讨论最多的就是AI编程助手到底哪个更好用。Claude Code的名气确实很大,很多技术社区都在讨论它。不过,除了这些“明星”选手&…...
