Day920.结构化日志&业务审计日志 -SpringBoot与K8s云原生微服务实践

这篇具有很好参考价值的文章主要介绍了Day920.结构化日志&业务审计日志 -SpringBoot与K8s云原生微服务实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

结构化日志&业务审计日志

Hi,我是阿昌,今天学习记录的是关于结构化日志&业务审计日志的内容。

1、什么是结构化日志

结构化日志(Structured Logging)是一种将日志信息组织为结构化数据的技术。

传统的日志通常是一些文本信息,比如一行记录一个错误或者事件,这些信息往往是自由格式的。

相比之下,结构化日志则采用一定的数据格式和模式,将日志信息组织为结构化的数据。

结构化日志可以提供更多的信息,比如时间戳、请求 ID、日志级别、错误类型等等,并且还可以包含一些自定义字段。

这些信息可以用于更好地理解应用程序的行为,从而更快地定位问题并进行故障排除。

Day920.结构化日志&业务审计日志 -SpringBoot与K8s云原生微服务实践

另外,结构化日志还可以方便地与其他工具集成,比如日志聚合工具、监控系统、日志分析工具等等,以便于更好地管理和分析日志数据。

总之,结构化日志是一种更加规范和高效的日志记录方式,它可以提供更多的信息和更好的可读性,同时还能够更好地支持各种日志管理和分析工具的集成。


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中所有字段文章来源地址https://www.toymoban.com/news/detail-405999.html

@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云原生微服务实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 结构化GPT用例,在CSDN私密社区中死磕@ada 探索SpringBoot

    摘要:bbs.csdn.net 有私密社区。csdn的社区里支持@ada (会员权益)评论和连续对话。本文展示了在私密社区层层结构化地死磕@ada,通过构建的方式探索技术问题。【learning by doing】。这个过程是从【learner】为中心出发的,产生了【一个又一个无法预估的思考链条】,learner在这个

    2024年02月10日
    浏览(44)
  • 结构化数据、非结构化数据、半结构化数据

    结构化的数据一般是指可以使用关系型数据库表示和存储,可以用二维表来逻辑表达实现的数据。例如:需要多少个属性,每个属性什么类型,每个属性的取值范围等等,类似下图所示, 提前定义好了一个二维矩阵的元数据 ,包含有列名称、列的类型、列的约束等:   可见

    2024年02月09日
    浏览(62)
  • elasticsearch结构化查询

    在上一篇中我们介绍了DSL相关的知识,接下来我们将会学习elasticsearch的结构化查询,同时也实践一下上一篇的DSL的查询用法 从《Elasticsearch权威指南》上摘取部分解释如下: 从上面的定义我们可以看出来结构化查询最重要的就是是否匹配么人并不是很关心相关性和分值计算。

    2024年02月01日
    浏览(44)
  • 【numpy基础】--结构化

    目前为止,介绍的 numpy 数组基本都是关于数值的,其实, numpy 本身就是一个用于数值计算的基础库。 不过,除了数值计算之外, numpy 也能够支持 结构化数组 。 numpy 的数组为了提高计算性能,要求数组的数据类型要一致。 但是现实情况下,我们经常遇到不是纯数值的数组

    2024年02月12日
    浏览(42)
  • 第五章 结构化设计

    一种软件开发活动,定义实现需求规约所需的软件结构。 结构化设计分为: (1)总体设计:确定系统的整体模块结构,即系统实现所需要的软件模块以及这些模块之间的调用关系。 (2)详细设计:详细描述模块。 体系结构设计(MSD) 接口设计 数据设计 实现软件设计的目标对结

    2024年02月08日
    浏览(56)
  • 结构化流的介绍

    目录 有界数据和无界数据 有界数据  无界数据  结构化流 基本介绍 入门案例 结构化流的编程模型 数据结构 数据源(Source) File Source Kafka Source(Spark 和 Kafka 整合) 整合Kafka准备工作 从kafka中读取数据 流式处理 批处理  数据写入Kafka中 流式处理 批处理 有界数据 数据有固定的开

    2024年01月15日
    浏览(61)
  • WPF 界面结构化处理

    WPF 框架是开源的,但是不能跨平台,可以使用MAUI,这个框架可以跨平台,WPF源码可以在github上下载,下载地址:https://gitbub.com/dotnet/wpf。 框架结构 如图 XAML:eXtensible Application Markup Language的英文缩写,相应的中文名称为:可扩展应用程序标记语言。 命名空间 默认 映射:x/

    2024年02月13日
    浏览(58)
  • elasticsearch结构化查询(一)

    在上一篇中我们介绍了DSL相关的知识,接下来我们将会学习elasticsearch的结构化查询,同时也实践一下上一篇的DSL的查询用法 从《Elasticsearch权威指南》上摘取部分解释如下: 从上面的定义我们可以看出来结构化查询最重要的就是是否匹配么人并不是很关心相关性和分值计算。

    2024年02月05日
    浏览(58)
  • SQL:结构化查询语言

    创建一张表并插入数据: 以下常用函数以MySQL为例,其它数据库类似

    2024年02月06日
    浏览(46)
  • 【案例】--非结构化数据中台案例

    最近接触一个平台架构的讨论,公司需要一个非结构化数据中台,理念是能够满足存储随时变换的非结构化数据,另外引入低代码思想。由于非结构化数据是未知的,不同业务的数据是不同,为了更好的使用,低代码就需要一种方案,在尽量不开发代码下满足相关需求变化,

    2024年02月10日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包