电子商务网站建设与规划视频,做网站图,公司做网站的优点,wordpress the time结构化日志业务审计日志
Hi#xff0c;我是阿昌#xff0c;今天学习记录的是关于结构化日志业务审计日志的内容。
1、什么是结构化日志
结构化日志#xff08;Structured Logging#xff09;是一种将日志信息组织为结构化数据的技术。
传统的日志通常是一些文…结构化日志业务审计日志
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
!--基础包--
dependencygroupIdtech.ibit/groupIdartifactIdstructlog4j-api/artifactIdversion1.2/version
/dependency!--扩展包--
dependencygroupIdtech.ibit/groupIdartifactIdstructlog4j-extend/artifactIdversion1.2/version
/dependencystructlog4j的核心思想就是将日志已key-value的方式呈现方便日期切分。
引入logger
import tech.ibit.structlog4j.Logger;
import tech.ibit.structlog4j.StructLoggerFactory;
private static final Logger log StructLoggerFactory.getLogger(Test.class);默认日志格式(key-value):
_messageSomething error!useribit-tech_errorMessageTest Exceptionjson日志格式
{_message:Something error!,user:ibit-tech,_errorMessage:Test Exception}修改全局formatter方法
方法1java代码
StructLog4J.setFormatter(JsonFormatter.getInstance());
方法2classpath:/structlog4j.properties)
formattertech.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实现MapToLogtoLog()会返回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;
}