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,远程服务器下载文…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

五子棋测试用例
一.项目背景 1.1 项目简介 传统棋类文化的推广 五子棋是一种古老的棋类游戏,有着深厚的文化底蕴。通过将五子棋制作成网页游戏,可以让更多的人了解和接触到这一传统棋类文化。无论是国内还是国外的玩家,都可以通过网页五子棋感受到东方棋类…...
高防服务器价格高原因分析
高防服务器的价格较高,主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因: 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器,因此…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
用js实现常见排序算法
以下是几种常见排序算法的 JS实现,包括选择排序、冒泡排序、插入排序、快速排序和归并排序,以及每种算法的特点和复杂度分析 1. 选择排序(Selection Sort) 核心思想:每次从未排序部分选择最小元素,与未排…...

C# WPF 左右布局实现学习笔记(1)
开发流程视频: https://www.youtube.com/watch?vCkHyDYeImjY&ab_channelC%23DesignPro Git源码: GitHub - CSharpDesignPro/Page-Navigation-using-MVVM: WPF - Page Navigation using MVVM 1. 新建工程 新建WPF应用(.NET Framework) 2.…...
ffmpeg(三):处理原始数据命令
FFmpeg 可以直接处理原始音频和视频数据(Raw PCM、YUV 等),常见场景包括: 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装(如封装为 MP4、TS) 处理原始 YUV 视频…...