Day920.结构化日志业务审计日志 -SpringBoot与K8s云原生微服务实践
结构化日志&业务审计日志
Hi,我是阿昌,今天学习记录的是关于结构化日志&业务审计日志的内容。
1、什么是结构化日志
结构化日志(Structured Logging)是一种将日志信息组织为结构化数据的技术。
传统的日志通常是一些文本信息,比如一行记录一个错误或者事件,这些信息往往是自由格式的。
相比之下,结构化日志则采用一定的数据格式和模式,将日志信息组织为结构化的数据。
结构化日志可以提供更多的信息,比如时间戳、请求 ID、日志级别、错误类型等等,并且还可以包含一些自定义字段。
这些信息可以用于更好地理解应用程序的行为,从而更快地定位问题并进行故障排除。

另外,结构化日志还可以方便地与其他工具集成,比如日志聚合工具、监控系统、日志分析工具等等,以便于更好地管理和分析日志数据。
总之,结构化日志是一种更加规范和高效的日志记录方式,它可以提供更多的信息和更好的可读性,同时还能够更好地支持各种日志管理和分析工具的集成。
2、什么是业务审计日志
业务审计日志(Business Audit Log)是一种记录系统中关键业务事件的日志,这些事件通常与应用程序的业务逻辑有关。
业务审计日志可以记录诸如用户登录、数据修改、交易流程、审批流程等重要事件,以便管理人员对系统进行审计。
此外,业务审计日志还可以跟踪应用程序中的所有操作,并记录有关这些操作的详细信息,如时间戳、请求 ID、执行结果、错误类型等等。
通过使用业务审计日志,管理人员可以快速定位和排查系统中的问题,以便及时采取措施。
此外,业务审计日志还可以帮助企业遵守法规和标准,如HIPAA、PCI DSS等等。
这是因为这些法规和标准通常要求企业记录和保留关键业务事件的详细信息,以便进行监管和审核。
总之,业务审计日志是软件开发领域中一种重要的日志记录方式,它可以提供关键的业务信息,帮助管理人员了解应用程序的运行状况,并支持企业遵守法规和标准。
3、Log4j2
Log4j2 提供了一些内置的格式化器和日志适配器,可以轻松地将日志发送到各种目标,如文件、控制台、远程服务器和数据库。
它还提供了灵活的配置选项,使开发人员能够根据不同的需求对日志记录进行定制。除了传统的日志级别和文本消息之外,Log4j 2 还支持使用消息对象来记录结构化日志。
这些消息对象可以包含多个键值对,表示一些事件、错误或其他信息。这种方式可以更清晰地记录日志事件,并支持更好的可读性和可搜索性。
总之,Log4j 2 是 Java 领域中一种常见的结构化日志库,它提供了方便的方式来记录结构化日志,并支持灵活的配置选项和多种目标输出。
4、Structlog4j
Structlog4j用了Log4j2规范的一种结构化日志框架
Maven
<!--基础包-->
<dependency><groupId>tech.ibit</groupId><artifactId>structlog4j-api</artifactId><version>1.2</version>
</dependency><!--扩展包-->
<dependency><groupId>tech.ibit</groupId><artifactId>structlog4j-extend</artifactId><version>1.2</version>
</dependency>
structlog4j的核心思想就是将日志已key-value的方式呈现,方便日期切分。
引入logger:
import tech.ibit.structlog4j.Logger;
import tech.ibit.structlog4j.StructLoggerFactory;
private static final Logger log = StructLoggerFactory.getLogger(Test.class);
默认日志格式(key-value):
_message=Something error!&user=ibit-tech_errorMessage=Test Exception
json日志格式:
{"_message":"Something error!","user":"ibit-tech","_errorMessage":"Test Exception"}
修改全局formatter方法:
方法1(java代码):
StructLog4J.setFormatter(JsonFormatter.getInstance());
方法2(classpath:/structlog4j.properties):
formatter=tech.ibit.structlog4j.extend.JsonFormatter#getInstance
用法
_message说明(以error为例子)
Logger存在一下方法支持error级别日志
/*** ERROR日志** @param message 消息* @param params 参数*/
void error(String message, Object... params);/*** ERROR日志** @param messages 消息片段* @param params 参数*/
void error(Object[] messages, Object... params);
其中message和messages的区别在于,messages支持传入占位符,eg:
logger.error("Something error, id: 12, username: ibit-tech");等价于:logger.error(new Object[] {"Something error, id: {}, username: {}", 12, "ibit-tech"});
使用key-value的方式
log.error("Something error", "user", "ibit-tech", "age", 100);
实现ToLog对key-value进行包装
log.error("Something error", (ToLog) () -> new Object[] {"user", "ibit-tech", "age", 1.2});
异常处理
log.error("Something error", "user", "ibit-tech", "age", 100, new RuntimeException("Test Exception"));
混合使用
log.error("Something error", (ToLog) () -> new Object[] {"user", "ibit-tech"}, "age", 1.2);
log.error("Something error", (ToLog) () -> new Object[] {"user", "ibit-tech"}, "age", 1.2, (ToLog) () -> new Object[] {"city", "sz"}, new RuntimeException("Test Exception"));
POJO实现MapToLog,toLog()会返回POJO中所有字段:
@Test
public void toLog() {User user = new User("ibit-tech", 21);Assert.assertEquals("[name, ibit-tech, age, 21]", Arrays.asList(user.toLog()).toString());
}@Value
public class User implements MapToLog {private String name;private int age;
}
相关文章:
Day920.结构化日志业务审计日志 -SpringBoot与K8s云原生微服务实践
结构化日志&业务审计日志 Hi,我是阿昌,今天学习记录的是关于结构化日志&业务审计日志的内容。 1、什么是结构化日志 结构化日志(Structured Logging)是一种将日志信息组织为结构化数据的技术。 传统的日志通常是一些文…...
前端代码复用学习笔记:整洁架构与清晰架构
基础代码的复用往往比较简单,但是业务代码的复用通常是困难的,如果没有特殊的手段去治理项目会逐渐发展为难以维护的巨石应用,按照维基百科记载,代码的复用形式主要有三种,程序库,应用框架,设计…...
【python刷题】leecode官方提示“->“,“:“这些符号是什么意思?什么是Type Hints?
作者:20岁爱吃必胜客(坤制作人),近十年开发经验, 跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。…...
【华为OD机试真题2023 JAVA】最佳对手
华为OD机试真题,2023年度机试题库全覆盖,刷题指南点这里 最佳对手 知识点排序DFS搜索回溯 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 游戏里面,队伍通过匹配实力相近的对手进行对战。 但是如果匹配的队伍实例相差太大,对于双方游戏体验都不会太好。 给定n个…...
css实现文字大小自适应
在页面编写中经常会碰到页面自适应的问题,也就是页面内部的元素会随着窗口的放大缩小而放大缩小,box可以通过calc 百分比的形式做到页面自适应,但是box内的字体却无法做到这点,往往box自适应大小了,内部的字体还是原来…...
【Redis】搭建哨兵集群
目录 集群结构 准备实例和配置 启动 测试 集群结构 这里我们搭建一个三节点形成的Sentinel集群,来监管之前的Redis主从集群。如图: 三个sentinel实例信息如下: 节点IPPORTs1192.168.150.10127001s2192.168.150.10127002s3192.168.150.…...
CTFHub | .htaccess
0x00 前言 CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。 0x01 题目描述…...
微机原理 || 8253 芯片 (详细讲解 + 经典例题)
一点点看!一定可以看懂!考试没有问题的!加油💪 前面知识写的详细,看不懂可以先看典例,回头来梳理就明白了【典例就是常考的题】 目录 Part 1: 芯片知识总结 (一)8253 芯片特点 …...
python Django高级操作-分页-定义CVS-发送邮件
分页 分页是指在web页面有大量数据需要显示,为了阅读方便在每个页页中只显示部分数据。优点: 1.方便阅读2.减少数据提取量,减轻服务器压力。Paginator对像 负责分页数据整体的管理对象的构造方法Paginator属性 Paginator方法 Paginator异常exception pag…...
React 用一个简单案例体验一遍 React-dom React-router React-redux 全家桶
一、准备工作 本文略长,建议耐心读完,每一节的内容与上一节的内容存在关联,最好跟着案例过一遍,加深记忆。 1.1 创建项目 第一步,执行下面的命令来创建一个 React 项目。 npx create-react-app react-example cd rea…...
9. C#面向对象基础
一、C# 类 在 C# 中,类是引用类型的。类由成员属性和成员方法构成。我们可以动态创建类的实例(instance),这个实例也被称为对象(object),我们可以通过类和对象来设计程序。 1、类的定义 类的定…...
【MIT 6.S081】Lab2: system calls
本Lab包括两个简单系统调用的实现,进一步熟悉系统调用接口。 笔者用时约1.5h 概述 根据文档说明,当我们添加一个系统调用时,比如第一个任务是添加一个trace,需要进行以下操作: 首先将系统调用的原型添加到user/user…...
设计模式之单例模式~
设计模式包含很多,但与面试相关的设计模式是单例模式,单例模式的写法有好几种,我们主要学习这三种—饿汉式单例,懒汉式单例、登记式单例,这篇文章我们主要学习饿汉式单例 单例模式: 满足要点: 私有构造 …...
top终端详解
1.top命令行使用 2.top每行意义 3.补充 1.top命令行使用 top命令是一个常用的Linux系统命令,用于实时查看系统的运行状态和进程信息。下面是top命令的几个常用参数的含义: -d seconds:设置top命令的更新间隔时间,单位是秒。默认是…...
解决一个偶现的503 bug,花了俺不少时间
概述 在3月2日晚上,大概8点左右,本想打道回府,回家休息,突然被人在bug群了一下,说是管理后台,访问不了,界面上出现了: 503 service temporarily unavailable我赶紧尝试访问了一下,确…...
什么是栈,如何实现?
欢迎来到 Claffic 的博客 💞💞💞 “但有一枝堪比玉,何须九畹始征兰?” 前言: 栈是一种特殊的线性表,就像开盖的桶一样,从底部开始放数据,从顶部开始取数据,那么栈具体是…...
在我的MacBook上捣鼓ESP8266
周三是我们的篮球日,打篮球后总是会有些兴奋,然后就容易睡不着,额,睡不着就拿我的ESP8266开发板出来捣鼓一下。先下载编译工具链https://github.com/espressif/ESP8266_RTOS_SDK下载sdkgit clone https://github.com/espressif/ES…...
【深度强化学习】(8) iPPO 模型解析,附Pytorch完整代码
大家好,今天和各位分享一下多智能体深度强化学习算法 ippo,并基于 gym 环境完成一个小案例。完整代码可以从我的 GitHub 中获得:https://github.com/LiSir-HIT/Reinforcement-Learning/tree/main/Model 1. 算法原理 多智能体的情形相比于单智…...
77.qt qml-QianWindow-V1版本界面讲解
上章介绍: 76.qt qml-QianWindow开源炫酷界面框架简介(支持白色暗黑渐变自定义控件均以适配) 界面如下所示: 代码结构如下所示:...
RHCE学习日记二
1、在 node1 主机上配置 chrony 时间服务器,将该主机作为时间服务器。 命令: vim /etc/chrony.conf 在文件位置添加命令: #Use public servers from the pool.ntp.org project. #Please consider joining the pool (https://www.pool.ntp.org…...
保姆级教程:为你的Python Flask/Vue项目配置Nginx HTTPS,并解决SSE流响应卡顿问题
保姆级教程:为你的Python Flask/Vue项目配置Nginx HTTPS,并解决SSE流响应卡顿问题 当你将Python Flask后端与Vue前端项目部署到生产环境时,配置HTTPS是必不可少的安全措施。但许多开发者发现,在启用HTTPS后,原本流畅的…...
经典35kW V型磁钢永磁同步电机设计:基于Maxwell的成熟方案解析
基于Maxwell设计的 经典35kW,外径290 轴向长度88 3000RPM,111.5Nm, 6极36槽永磁同步电机(PMSM)设计案例(V型磁钢),该案例已制作样机,方案成熟,运行稳定,可直接用于生产,…...
Linux进程调度机制与性能优化实践
1. Linux进程调度概述在Linux操作系统中,进程调度是内核最核心的功能之一。作为一个多任务操作系统,Linux需要合理地分配有限的CPU资源给众多进程,使它们能够高效、公平地运行。理解Linux的调度机制,对于系统性能调优、应用开发以…...
探秘书匠策AI:毕业论文写作的“智慧引擎”
在学术探索的征途中,毕业论文如同一座巍峨的山峰,让无数学生既敬畏又向往。它不仅是对所学知识的综合检验,更是学术生涯的重要里程碑。然而,面对这座大山,许多人常常感到力不从心,选题迷茫、文献难觅、结构…...
分子对接盒子参数智能生成:GetBox-PyMOL-Plugin蛋白质结构分析专业指南
分子对接盒子参数智能生成:GetBox-PyMOL-Plugin蛋白质结构分析专业指南 【免费下载链接】GetBox-PyMOL-Plugin A PyMOL Plugin for calculating docking box for LeDock, AutoDock and AutoDock Vina. 项目地址: https://gitcode.com/gh_mirrors/ge/GetBox-PyMOL-…...
Qwen3-14B GPU算力优化实践:显存占用降低28%的FlashAttention-2配置
Qwen3-14B GPU算力优化实践:显存占用降低28%的FlashAttention-2配置 1. 开箱即用的私有部署方案 对于想要快速部署Qwen3-14B大模型的企业和个人开发者来说,这个经过优化的私有部署镜像提供了完美的解决方案。它基于RTX 4090D 24GB显存显卡和CUDA 12.4环…...
树莓派新手必看:保姆级vim安装与配置指南(含国内源切换和常见报错解决)
树莓派新手必看:保姆级vim安装与配置指南(含国内源切换和常见报错解决) 第一次接触树莓派的新手们,面对命令行操作往往既兴奋又忐忑。作为Linux系统中最强大的文本编辑器之一,vim的高效与灵活令人向往,但初…...
SpringBoot项目实战:用Java海康SDK搞定摄像头录像与门禁人脸下发(附完整代码)
SpringBoot企业级实战:海康威视SDK深度集成与智能安防系统开发 1. 企业级安防系统架构设计 在智能园区和现代化办公环境中,视频监控与门禁管理的无缝集成已成为刚需。海康威视作为全球领先的安防解决方案提供商,其设备SDK的深度集成能够为Jav…...
别再为Block Design里Bram深度改不了发愁了!手把手教你用Address Editor搞定(附深度换算详解)
突破Block Design中Bram深度修改困境:Address Editor实战指南 在FPGA开发过程中,Block Design的可视化设计方式极大提升了开发效率,但同时也隐藏着一些让开发者困惑的"陷阱"。其中,Bram IP核深度参数无法直接修改的问题…...
保姆级教程:用yangipcclient RN SDK 8.0快速给你的App加上实时对讲功能
保姆级实战:React Native应用集成实时对讲功能的完整指南 想象一下,你正在开发一款智能家居控制应用,用户反馈最强烈的需求是能够直接与家中的设备进行语音对讲。或者你负责的教育类App,小组讨论时缺少高效的实时语音沟通工具。传…...
