聊一聊项目中的日志配置(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 今天我们还是来讲讲日志,不过,不是关于日志的保存,而是关于在项目中遇到需要在程序中多处输出日志且每次的日志量都很大时,我们可以如何处理来提高程序的性能。

强哥之前有发过一篇文章:聊一聊项目中的日志配置,其中讲述了项目log4j日志配置文件中,通过修改一些参数实现日志分期保存以及保存文件个数限制相关问题以及相应的处理方式。当然如果日志量过大还是推荐项目中接入ELK将日志放入搜索引擎中进行后期的查询处理。


今天我们还是来讲讲日志,不过,不是关于日志的保存,而是关于在项目中遇到需要在程序中多处输出日志且每次的日志量都很大时,我们可以如何处理来提高程序的性能。


当程序逻辑复杂需要输出日志的点很多时(用于排查问题);当程序多个点需要输出日志,且每个点输出的日志内容较大时;当应用用户访问量大、并发高导致日志输出非常快时;当QA压测觉得你的程序性能较差时……


为了提升我们程序的性能,同时兼顾日志的输出而不至于对业务逻辑有较大的影响,无疑,我们要做的就是将日志的输出从业务逻辑的中剥离出来,更准确的将应该是通过异步的方式,使得日志输出对业务影响降到最小,同时不影响我们必要的日志的输出和保存。


异步日志输出:


接下来我们也就简单的讲解一下,在Springboot项目中(使用log4j2),如何配置上全局的异步日志以及如何验证程序确实开启了异步日志输出。


首先提一下为什么要使用log4j2吧,因为在log4j版本中,异步输出日志的功能问题还比较多,性能上也差了许多,今天发的另一篇会展示两者的差异。所以,在0202年当下,还是建议大家能够将log4j升级到log4j2。当然,如果你使用的是logback日志工具,它同样也带有开启异步日志输出的方式,大家感兴趣的可以自行百度。


其实Springboot配置log4j2异步输出日志方式比较简单,有混合模式和全模式,官方也比较推荐使用全异步模式,最大提升性能。所以强哥这里也就只提一下全异步模式的配置方式:


步骤一、添加依赖:


<dependency>  <groupId>com.lmax</groupId>  <artifactId>disruptor</artifactId>  <version>3.4.2</version></dependency>

步骤二、修改启动类或在项目启动时语句中加入属性参数:


修改启动类:


@SpringBootApplicationpublic class TestApplication {public static void main(String[] args) {//下面语句使得日志输出使用异步处理,减小输出日志对性能的影响        System.setProperty("Log4jContextSelector", "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");        SpringApplication.run(TestApplication.class, args);    }}

修改项目启动语句:


java -jar -DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector xxx.jar


两种方式选择一种就行。按个人喜好处理。


没错,就上面简单的两步就能实现在项目启动后,异步日志的功能。当然,有的人可能还会问:配置是配置上了,可是到底是不是真的实现异步日志输出了呢?要怎么验证呢?


这里,我们可以通过查看项目启动后的线程名来检查是否真的配置成功了。下面是强哥在启动项目后,项目中的线程情况截图:


7.png


可以看到,有两个线程是关于Log4j2的,其中上面红框中的Log4j2-TF-AsyncLogger就是异步日志输出线程。看到它说明我们的配置是成功的。如果还是不确定,可以Debug模式运行项目,选择该线程,ide会进入到该线程查看程序到达该线程的一系列的操作,由此便可以知道成功配置了异步日志输出功能。


好了,上面便是Springboot实现log4j2异步输出日志的相关实现。其实内容相对简单,但是强哥更希望传递的是当大家遇到问题的时候,能够想到相应的解决方式,对于项目中与业务逻辑并非必要但是却影响性能的地方,完全可以通过异步或拆分的方式来保证性能。


这里没有讲解过多的原理,只是因为网上相应的原理说明确实太多,但是如何配置实现却都含糊不清,大家对原理等有兴趣也可以自己多去了解,这里只做抛砖引玉的作用啦,只希望大家遇到日志相关的瓶颈时,可以想到此解决方式。

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
5天前
|
监控 安全 程序员
Python日志模块配置:从print到logging的优雅升级指南
从 `print` 到 `logging` 是 Python 开发的必经之路。`print` 调试简单却难维护,日志混乱、无法分级、缺乏上下文;而 `logging` 支持级别控制、多输出、结构化记录,助力项目可维护性升级。本文详解痛点、优势、迁移方案与最佳实践,助你构建专业日志系统,让程序“有记忆”。
85 0
|
28天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
252 4
|
安全 BI 网络安全
EventLog Analyzer 如何满足等保合规要求?密码有效期、产品日志保留、配置备份三大核心问题全面解答
EventLog Analyzer(ELA)助力企业满足网络安全等级保护要求,支持配置自动/手动备份、日志180天留存及密码策略管理,提升合规性与安全运营效率。
|
7月前
|
Java 微服务 Spring
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录——使用Logger在项目中打印日志
本文介绍了如何在项目中使用Logger打印日志。通过SLF4J和Logback,可设置不同日志级别(如DEBUG、INFO、WARN、ERROR)并支持占位符输出动态信息。示例代码展示了日志在控制器中的应用,说明了日志配置对问题排查的重要性。附课程源码下载链接供实践参考。
814 0
|
7月前
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
652 0
|
3月前
|
JSON 安全 Go
Go语言项目工程化 —— 日志、配置、错误处理规范
本章详解Go语言项目工程化核心规范,涵盖日志、配置与错误处理三大关键领域。在日志方面,强调其在问题排查、性能优化和安全审计中的作用,推荐使用高性能结构化日志库zap,并介绍日志级别与结构化输出的最佳实践。配置管理部分讨论了配置分离的必要性,对比多种配置格式如JSON、YAML及环境变量,并提供viper库实现多环境配置的示例。错误处理部分阐述Go语言显式返回error的设计哲学,讲解标准处理方式、自定义错误类型、错误封装与堆栈追踪技巧,并提出按调用层级进行错误处理的建议。最后,总结各模块的工程化最佳实践,助力构建可维护、可观测且健壮的Go应用。
|
4月前
|
存储 NoSQL MongoDB
Docker中安装MongoDB并配置数据、日志、配置文件持久化。
现在,你有了一个运行在Docker中的MongoDB,它拥有自己的小空间,对高楼大厦的崩塌视而不见(会话丢失和数据不持久化的问题)。这个MongoDB的数据、日志、配置文件都会妥妥地保存在你为它精心准备的地方,天旋地转,它也不会失去一丁点儿宝贵的记忆(即使在容器重启后)。
448 4
|
5月前
|
Java 应用服务中间件 Linux
Tomcat运行日志字符错乱/项目启动时控制台日志乱码问题
总结: 通过以上几种方法,概括如下:指定编码格式、设置JVM的文件编码、修改控制台输出编码、修正JSP页面编码和设置过滤器。遵循这些步骤,你可以依次排查和解决Tomcat运行日志字符错乱及项目启动时控制台日志乱码问题。希望这些建议能对你的问题提供有效的解决方案。
984 16
|
6月前
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
176 23
|
7月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。

热门文章

最新文章