切换日志框架|学习笔记

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 快速学习切换日志框架

开发者学堂课程【SpringBoot快速掌握 - 核心技术切换日志框架】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/612/detail/9239


切换日志框架

现在默认 springboot 是 slf4j +logback 方式,如果用 slf4j+logf4j 的方式,这个切换是有没意义的,因为 logf4j 本来就是因为作者觉得写的不好写了一个 logback 和 sjf4J 进行适配,那么该怎么切换成 logf4 j 呢?

根据日志关系图进行切换,假设现在想用 logf4j,那么首先要面向 slf4j 编程,中间得有一个适配包,那么需要先把其他的日志包都干掉,所以在 pom.xml 中分析依赖数:

第一件事实在依赖图中将 logback 删除。

第二件事日志关系图中其他的转成 slf4j,所以要将 log4j-over-slf4

删除,因为它是一个替换包。所以就变成了:

image.png

把其他的框架 jcl 和 jul 转化成 slf4j。

虽然面向 slf4j 编程,但是要用 logf4j 实现,那么就需要导入中间的一个适配层:

在 pom.xml 文件里导入:

org.slf4j

slf4j-log4j12/artifactId>

版本不用自己写,并且导入它的好处是在依赖图中找到 slf4j-log4j12 可以看到自动生成一个 log4j ,因为适配层的包本身就依赖 log4j 

现在就相当于导入了适配层的包, slf4j 在系统中,其他的也替换完成,那么就可以使用 log4j 了。

运行看一下效果:

在控制台中显示

二月01,2018 5:07:14 下午

org.apache.catalina.core.StandardService startInternal

信息: Starting service [ Tomcat]

二月01,2018 5:07:14 下午

org.apache.catalina.core.StandardEngine startInternal

信息:Starting Servlet Engine: Apache Tomcat/8.5.27

二月01,2018 5:07:14 下午

org.apache.catalina.core.ApplicationContext log

信息:Initializing Spring embedded webApplicationContext

输出不像以前那么多日志了,因为已经切换到log4j了,而log4j没有配置文件。

新创建一个文件将log4j配置文件复制进去。

Log4j配置文件是被log4j框架识别的,执行启动起来可以看到记录都是log4j记录着。

比如:

###输出到控制台###

1og4j.appender.stdout = org.apache.log4j.consoleAppender

log4j.appender.stdout.Target = System.out

1g4j.appender.stdout.layout = org.apache.log4j.PatternLayout

log4j.appender.stdout.1layout.ConversionPattern = %d{ABSOLUTE}

=== %5p %c{1}:%L-%m%n 

启动发现已经切换了,不过这个切换时没有意义的,只是做一个演示。因为 log4j 设计不好,用 logback 替换。

切换日志框架:

可以按照 slf4j 的日志适配图,进行相关的切换;

Slf4j+log4j 的方式:(按照关系图进行导入和删除)

<dependency>

<groupId>org.springframework . boot</groupId>

<artifactId>spring-boot-starter-web</ artifactId><exclusions>

<exclusion>

<artfactId>logback-classic</artifactId>

<groupId>ch.qos.logback</ groupId>

</exclusion>

<exclusion>

<artifactId>log4j-over-slf4j</artifactId>

<groupId>org.slf4j</groupId>

</exclusion>

</exclusions>

< / dependency>

<dependency>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-log4j12</artifactId>

</dependency>

但是不推荐这样做只使用这种方式将原理掌握更深一点。

这样就用到 log4j2 了,分析这个依赖:

 image.png

 

里面有 jcl、jul 将其他框架转成 slf4j,新添了 log4j-core 版本2.7和中间的适配包,这样就切换到  了 l og4j2,可以直接运行测试一下。

运行发现打印还是默认配置,在 spring boot 里面默认支持 log4j2,log4j2 的配置文件是 log4j2.xml 和 log4j2-file.xml,也可以按照之前一样制定自己的 log4j2 配置文件最好加上 spring。

切换为 log4j2:(将之前的删除就可以了)

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</ artifactId>

<exclusions>

<exclusion>

<artifactId>spring-boot-starter-logging

</ artifactId><groupId>org.springframework .boot</groupId>

</exclusion>

</exclusions>

</ dependency>

<dependency>

<groupId>org.springframework .boot</groupId>

<artifactId>spring-boot-starter-log4j2</ artifactId>

< / dependency>

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
1天前
|
人工智能 运维 安全
|
4天前
|
SpringCloudAlibaba 负载均衡 Dubbo
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
本文对比分析了SpringCloudAlibaba框架下Feign与Dubbo的服务调用性能及差异。Feign基于HTTP协议,使用简单,适合轻量级微服务架构;Dubbo采用RPC通信,性能更优,支持丰富的服务治理功能。通过实际测试,Dubbo在调用性能、负载均衡和服务发现方面表现更出色。两者各有适用场景,可根据项目需求灵活选择。
375 124
微服务架构下Feign和Dubbo的性能大比拼,到底鹿死谁手?
|
6天前
|
人工智能 JavaScript 测试技术
Qwen3-Coder入门教程|10分钟搞定安装配置
Qwen3-Coder 挑战赛简介:无论你是编程小白还是办公达人,都能通过本教程快速上手 Qwen-Code CLI,利用 AI 轻松实现代码编写、文档处理等任务。内容涵盖 API 配置、CLI 安装及多种实用案例,助你提升效率,体验智能编码的乐趣。
606 107
|
3天前
|
Java 数据库 数据安全/隐私保护
Spring 微服务和多租户:处理多个客户端
本文介绍了如何在 Spring Boot 微服务架构中实现多租户。多租户允许单个应用实例为多个客户提供独立服务,尤其适用于 SaaS 应用。文章探讨了多租户的类型、优势与挑战,并详细说明了如何通过 Spring Boot 的灵活配置实现租户隔离、动态租户管理及数据源路由,同时确保数据安全与系统可扩展性。结合微服务的优势,开发者可以构建高效、可维护的多租户系统。
197 127
|
3天前
|
Web App开发 前端开发 API
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
在折叠屏应用中,如何处理不同屏幕尺寸和设备类型的样式兼容性?
224 124
|
3天前
|
人工智能 数据可视化 测试技术
Coze平台指南(3):核心功能-创建智能体与设计角色
Coze 智能体是由大语言模型驱动,通过提示词设定角色,并借助知识库、插件和工作流扩展能力,以执行特定任务的AI助手。对测试工程师而言,精心设计的智能体可显著提升测试效率与质量,关键是要准确理解测试需求,并将其转化为智能体的角色设定和功能配置。建议进一步学习知识库与工作流,以深化应用。
|
7天前
|
JSON fastjson Java
FastJson 完全学习指南(初学者从零入门)
摘要:本文是FastJson的入门学习指南,主要内容包括: JSON基础:介绍JSON格式特点、键值对规则、数组和对象格式,以及嵌套结构的访问方式。FastJson是阿里巴巴开源的高性能JSON解析库,具有速度快、功能全、使用简单等优势,并介绍如何引入依赖,如何替换Springboot默认的JackJson。 核心API: 序列化:将Java对象转换为JSON字符串,演示对象、List和Map的序列化方法; 反序列化:将JSON字符串转回Java对象,展示基本对象转换方法;