当前位置: 首页 > news >正文

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

Java允许我们通过日志记录过程来创建和捕获日志消息和文件。

在Java中,日志记录需要框架和API。Java在java.util.logging程序包中具有内置的日志记录框架。

Java 日志组件

下图显示了Java Logging API(java.util.logging)的核心组件和指定流程。Java日志流程图:

Java Logging API的指定流

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)

处理程序还可以使用FormatterLogRecord对象格式化为字符串,然后再将其导出到外部系统。

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中&#xff0c;日志记录需要框架和API。Java在java.util.logging程序包中具有内置的日志记录框架。 Java 日志组件 下图显示了Java Logging API&#xff08;java.util.logging&#xff09;的核心组件和指定…...

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 可以控制软件&#xff08;一般指服务&#xff09;的启动、关闭、开机自启动 能被systemctl 管理的软件&#xff0c;一般也称 服务 系统内置服务均可被 systemctl 控制第三方软件&#xff0c;如果 自动注册了 可被systemctl 控制第三方软件&#xff0c;如果没有自动…...

【技巧】通过 CMD 走代理下载 Vue

通过 CMD 走代理下载 Vue 在学习或者工作中&#xff0c;有时上网走的是代理模式&#xff0c;就是在浏览器里面配置代理服务的那种。后来在下载 Vue 组件的时候显示请求超时。此时才发先&#xff0c;浏览器代理只能在浏览器里生效&#xff0c;cmd 中不生效&#xff0c;那该怎么办…...

VSCode C/C++多文件编译配置

多文件编译备忘&#xff0c;带注释的地方都需要注意&#xff01;&#xff01;&#xff01; launch.json文件 {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。// 欲了解更多信息&#xff0c;请访问: 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报文发送需要多长时间&#xff0c;下述文章里我们会首先计算下Can分别对应的字节数&#xff0c;再根据传…...

【phaser微信抖音小游戏开发002】hello world!

执行效果&#xff1a; 将以下代码文本内容&#xff0c;放入到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种组网技术,你会了吗?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 目录 一、VLAN技术 1、VLAN是什么&#xff1f; 2、VLAN的作用 ①提高网络安全性 ②提高了网络的灵活性性 ③增强了网络的健壮性 二、D…...

webpack中文文档

基本安装 首先我们创建一个目录&#xff0c;初始化 npm&#xff0c;然后 在本地安装 webpack&#xff0c;接着安装 webpack-cli&#xff08;此工具用于在命令行中运行 webpack&#xff09;&#xff1a; mkdir webpack-demo cd webpack-demo npm init -y npm install webpack …...

【Linux指令篇】--- Linux常用指令汇总(克服指令繁杂问题)

文章目录 前言&#x1f31f;一、Linux基本指令&#x1f31f;二、ls指令&#x1f30f;2.1.语法&#xff1a;&#x1f30f;2.2.功能&#xff1a;&#x1f30f;2.3.常用选项&#xff1a; &#x1f31f;三、pwd指令&#x1f30f;3.1.语法&#xff1a;&#x1f30f;3.2.功能&#xf…...

硬盘的分类

目前常见的硬盘种类主要有以下2种&#xff1a; 机械硬盘&#xff08;HDD&#xff09; 机械硬盘&#xff08;HDD&#xff09;是一种利用旋转磁盘和读写头来存储和访问数据的存储设备。它由磁盘、读写头、电机和控制电路等组成&#xff0c;磁盘通常是一种铝合金或玻璃材质的圆盘&…...

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 题目答案 题目 请编写一个十进制计数器模块&#xff0c;当mode信号为1&#xff0c;计数器输出信号递增&#xff0c;当mode信号为0&#xff0c;计数器输出信号递减。每次到达0&#xff0c;给出指示信号zero。模块的接口信号图如下&#xff1a; 模块的…...

4-7月预测价差方向准确率统计

月度 预测价差方向准确率 4月 33.6% 5月 28.4% 6月 25.7% 7月 34.2% 4-7月合计 30.6% 准确率计算公式&#xff1a; 其中&#xff0c; D&#xff1a;价差方向预测值&#xff08;1:实时>日前&#xff0c;0:实时日前&#xff0c;-1&#xff1a;实时<日前&#x…...

《Vue3+Typescript》一个简单的日历组件实现

这是一个没有套路的前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 目录 一、…...

第一章 修学旅行

前言 翻了翻文章回收站&#xff0c;好怀念靖和阳的故事啊&#xff08;航和颜&#xff1a;还有我们别忘啦&#xff09; 不知道还有没有人记得以前的故事呢…… 那么&#xff0c;我就开始写啦。这是关于密码学的一篇文章&#xff0c;一共2696字&#xff1a;D&#xff08;累死我…...

如果你也能认识并使用这个低代码平台,那真的是泰酷辣——iVX低代码平台

低代码技术起源是比较悠久的了&#xff0c;尤其是在近些年&#xff0c;随着技术的演进&#xff0c;低代码平台逐渐成为热门趋势。这些平台通过简化应用程序开发流程&#xff0c;减少手动编码&#xff0c;使非专业开发人员也能快速构建复杂应用。为我们的敏捷开发和高效生产贡献…...

uC-OS2 V2.93 STM32L476 移植:系统移植篇

前言 上一篇已经 通过 STM32CubeMX 搭建了 NUCLEO-L476RG STM32L476RG 的 裸机工程&#xff0c;并且下载了 uC-OS2 V2.93 的源码&#xff0c;接下来&#xff0c;开始系统移植 开发环境 win10 64位 Keil uVision5&#xff0c;MDK V5.36 uC-OS2 V2.93 开发板&#xff1a;NUC…...

gitee修改代码提交操作步骤说明

一&#xff0c;简介 本文主要介绍如何从gitee仓库下载文件&#xff0c;本地修改&#xff0c;本地提交&#xff0c;然后再push到远程服务器的操作步骤。供参考&#xff0c;欢迎一起讨论交流~ 二&#xff0c;操作步骤 总的操作步骤分为以下几步 1&#xff0c;远程服务器下载文…...

阿里云物联网平台OTA升级避坑指南:从版本号上报到Bin文件拉取的全流程排错

阿里云物联网平台OTA升级全链路排错实战手册 当设备固件需要远程更新时&#xff0c;OTA技术无疑是救星。但现实往往比理想骨感——版本号莫名失踪、升级包半路"走失"、设备在关键时刻"装聋作哑"。这些问题不仅耽误进度&#xff0c;更可能让生产线停摆。本文…...

中文大模型实战测评:MiniMax、GLM、Kimi谁更适合你的需求?(附详细对比表)

中文大模型实战测评&#xff1a;MiniMax、GLM、Kimi谁更适合你的需求&#xff1f; 当企业技术团队或个人开发者面临中文大模型选型时&#xff0c;往往陷入"参数崇拜"与"场景适配"的矛盾中。本文基于三个月真实项目测试数据&#xff0c;从工程落地视角拆解三…...

长脉冲激光打孔技术及其与水平集算法的融合应用

长脉冲激光打孔&#xff0c;水平集算法工业级激光打孔就像用光做的"绣花针"&#xff0c;在金属表面精准戳出微米级孔洞。但当我们把激光脉冲时间拉长到毫秒量级时&#xff0c;事情就变得有趣起来——材料不再是瞬间汽化&#xff0c;而是经历缓慢的熔融、流动、再凝固…...

实战指南:利用快马平台为不同项目类型智能定制idea开发环境与工具链

今天想和大家分享一个实战经验&#xff1a;如何根据不同项目类型&#xff0c;快速定制专属的IDEA开发环境。作为开发者&#xff0c;我们经常需要切换不同技术栈&#xff0c;每次手动安装插件、配置SDK的过程实在太费时间。最近发现用InsCode(快马)平台可以智能解决这个问题&…...

除了Omnipeek,你的8812BU网卡还能怎么玩?Win10下的另类WiFi抓包与网络诊断实战

解锁Realtek 8812BU网卡的隐藏潜能&#xff1a;Windows 10下的WiFi抓包与网络诊断全攻略 当你手握一块Realtek 8812BU无线网卡时&#xff0c;可能只把它当作普通的网络连接工具。但实际上&#xff0c;这款硬件在Windows 10环境下可以变身为强大的网络诊断利器。本文将带你探索…...

从DCM到NII:医学影像数据处理中,为什么我劝你放弃保存回DCM格式?

从DCM到NII&#xff1a;医学影像数据处理中格式选择的深度实践指南 医学影像数据处理的流程中&#xff0c;文件格式的选择往往被忽视&#xff0c;却直接影响着后续分析的效率与兼容性。许多研究者习惯性地将处理后的数据保存回DCM格式&#xff0c;殊不知这可能在后续流程中埋下…...

Java实战:阿里云OSS文件操作工具类封装与优化

1. 阿里云OSS基础认知与Java集成准备 第一次接触阿里云OSS时&#xff0c;我完全被文档里那些专业术语搞懵了。后来才明白&#xff0c;它本质上就是个超级网盘&#xff0c;只不过比我们平时用的网盘更专业、更稳定。想象一下&#xff0c;你有个无限容量的保险箱&#xff0c;可以…...

OpCore-Simplify:5分钟完成黑苹果EFI配置的终极解决方案

OpCore-Simplify&#xff1a;5分钟完成黑苹果EFI配置的终极解决方案 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 你是否曾为黑苹果配置而头痛&…...

Awoo Installer:破解Switch游戏安装限制的高性能解决方案

Awoo Installer&#xff1a;破解Switch游戏安装限制的高性能解决方案 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer Awoo Installer是一款专为破解…...

保姆级教程:用Kalibr搞定Realsense D455相机+IMU联合标定(含常见报错解决)

深度视觉传感器多模态标定实战指南&#xff1a;从Realsense D455到SLAM算法优化 在机器人感知与自主导航领域&#xff0c;视觉-惯性系统的精确标定是构建可靠SLAM/VIO算法的基石。本文将以Intel Realsense D455这款集成RGB-D相机与IMU的旗舰设备为例&#xff0c;系统讲解从单目…...