打印日志会不会影响性能?怎么办?

有关日志打印的几点经验 前段时间,完善智能导航发送告警短信中短信太长接收不到的bug,牵涉出了日志打印的问题;日志打印这件事说小事小,说大也大,写好日志能方便自己调试代码和发现解决问题,以下就是有关日志打印自己总结的几点经验教训: 日志打印应该分层、分角度,一个好的日志不应该只打印与业务有关的日志。 日志打印应该从以下几个方面去打印: 模块运行日志:模块运行日志包括消息队列的监控、线程的运行状态。该日志应该以INF... 阅读详情

问题

刚开始做开发的时候就有一个疑问, 我们开发一般为了调试方便都会给自己的业务代码加上一些日志, 那么问题来了, 打印这么多日志不会影响性能吗? 这个肯定是必然的, 毕竟需要计算机分出一些性能来打印日志的, 但一般要求不苛刻的场景可以忽略这个问题

前面说了一般情况下日志影响的性能是可以忽略的, 既然有一般那肯定就有不一般的情况, 今天来了解一下如何减少日志对性能的影响

方案

解决日志慢的问题,主要有两种方案,一个是异步,一个是降级。

因为日志写入操作通常是一个相对耗时的IO操作,如果每次日志记录都同步写入磁盘,可能会导致主线程阻塞,影响应用程序的性能。通过使用异步日志,主线程可以继续执行其他任务,而日志写入操作则由后台线程负责处理,提高了应用程序的响应性和吞吐量。

目前常用的日志框架,如Log4j2、Logback等都是支持异步日志的。都提供了AsyncAppender来实现异步的日志写入。


异步

如log4j2中做如下配置即可实现异步日志:

<!-- 异步日志依赖 -->
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
</dependency>

Log4j2提供了三种异步日志实现方法:全局异步AsyncLogger(推荐使用)、混合异步AsyncLogger(推荐使用)、AsyncAppender。

log4j2的全局异步AsyncLogger性能最好,其次是混合异步AsyncLogger,性能最差的是AsyncAppender(和同步日志相比没有什么性能提升。和logback性能一样)。

如果使用异步日志,全局异步AsyncLogger、混合异步AsyncLogger、AsyncAppender,不要同时使用。否则会使用性能较低的一种异步方式。

全局异步

所有appender的所有日志级别的日志都异步的记录,不需要改动log4j2.xml配置文件。只需要在classpath,比如resources目录下,新建log4j2.component.properties配置文件。内容如下:

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

混合异步AsyncLogger

可以同时使用同步日志和异步日志,这使得日志的配置方式更加灵活

log4j2.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="30">
 
 
    <Appenders>
		<!--这个输出控制台的配置 -->
		<console name="Console" target="SYSTEM_OUT">
			<!--输出日志的格式 -->
			<PatternLayout pattern="${log_pattern}" />
		</console>
    </Appenders>
 
    <Loggers>
        <!-- 自定义异步logger对象, name必须是LoggerFactory.getLogger(Log4j2Test.class)对应 -->
        <!-- 如果设置includeLocation=true, 开启日志记录行号信息会急剧降低异步日志的性能,比同步日志还要慢 -->
        <!-- 这里设置includeLocation=false,则PatternLayout的%l将不会打印出来 -->
        <!-- additivity="false": 不再继承RootLogger对象. 这里建议强制设置成false -->
        <AsyncLogger name="Log4j2Test" level="WARN" includeLocation="false" additivity="false">
            <AppenderRef ref="Console"/>
        </AsyncLogger>
 
        <!-- RootLogger是同步的。除Log4j2Test外,其它名称的logger使用RootLogger进行输出 -->
        <Root level="INFO">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

AsyncAppender

log4j2.xml配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" monitorInterval="5">
 
    <properties>
        <property name="LOG_HOME">/Users/userName/Logs/appName</property>
    </properties>
 
    <Appenders>
        <File name="File" fileName="${LOG_HOME}/myFile.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%-5level] %l --- %msg%n" />
        </File>
 
        <!-- AsyncAppender引用appender -->
        <Async name="Async">
            <AppenderRef ref="File"/>
        </Async>
    </Appenders>
 
    <Loggers>
        <Root level="INFO">
            <!-- 直接引用AsyncAppender -->
            <AppenderRef ref="Async" />
        </Root>
    </Loggers>
</Configuration>

降级

日志降级一般用的也不多,但是在大促场景中,也是会用到的,一般是配合预案一起做,就是在极端情况下,通过开关来调节, 让日志直接不输出。或者只打印ERROR级别的日志。或者做的更加精细一点,就是采样打印日志,比如采样1%进行日志输出,但是其实用的比较少,很多时候,采样和直接不打差别也不大。

因为这种场景基本使用不到的,了解一下他得原理就可以了, 有感兴趣的可以深入研究一下

后台日志该怎么打印 日志是任何系统中不可或缺的组成部分,合理的日志记录策略不仅能帮助开发人员高效排查问题,还能帮助运维团队监控系统健康、优化性能并确保安全性。在日志设计时,我们应特别关注内容的可读性、敏感信息的保护,以及合理控制日志记录频率。通过有效的日志管理、分析和告警机制,我们可以更好地保障系统的稳定性和安全性。 阅读详情

相关推荐

Aspen Plus下载教程Aspen Plus V14 保姆级安装步骤(附安装包)

26、在WlmAdmin界面中,依次点击【Subnet Servers】、【admin】、【Add Feature】、【From a File】、【To Server and its File】。35、在产品选择页面,勾选需要安装的所有产品(重要:不要勾选【Aspen Online(Plant Data)】),然后点击【File Location】。回到桌面,点击任务栏的【开始菜单】,在【所有应用】中找到【Aspen Plus V14】软件图标,将其拖到桌面上创建快捷方式。9、这里可以更改软件的安装位置。

ps_xiaowang的博客 1万+

打印日志导致业务变慢 cpu飙升 变慢

【代码】打印日志导致业务变慢 cpu飙升 变慢。

heqiang1995的博客 106

Prokka实战:10分钟搞定细菌基因组注释(附详细参数解析)

本文深入解析Prokka细菌基因组注释工具的核心参数与实战策略。通过拆解其集成化工作流程,详细解读物种分类、功能注释、输出控制等关键参数,并提供快速初筛、高质量发表、质粒注释及批量处理四种典型场景的高效参数组合方案,帮助用户精准掌控注释过程,将原始序列转化为有价值的生物学见解。

weixin_29271053的博客 436

日志相关问题

日志打印过多,会对磁盘IO和CPU性能造成比较大的压力,所以可以通过日志分级去控制日志的输出。

qq_43361066的博客 1977

冒泡排序的并行计算

本人也是并行计算的小白,在这里记录下自己的学习笔记。 今天做了一下冒泡排序的并行计算比较: 串行冒泡排序如下: #include <stdio.h> #include <stdlib.h> #include <windows.h> void BubbleSort(int * pData, int nSize) { if (!pData) { ...

gaoyi的专栏 4487

数字人接大模型第二步:语音克隆

推荐XTTS-v2项目,由Coqui公司开发的语音生成模型,专为多语言语音克隆和生成设计。它支持17种语言,包括英语、西班牙语、法语、德语、意大利语、葡萄牙语、波兰语、土耳其语、俄罗斯语、荷兰语、捷克语、阿拉伯语、中文、日语、匈牙利语、韩语和印地语。XTTS-v2的核心优势在于其仅需6秒的音频片段即可实现语音克隆,无需大量的训练数据。此外,它还支持情感和风格转移、跨语言语音克隆以及多语言语音生成,采样率高达24kHz。地址:https://github.com/archwesome/XTTS-v2。

400

日志对性能的影响以及我的几个日志习惯

本文内容:1、背景2、影响性能的日志因素3、好的日志习惯|| 背景写这篇文章有 2 个原因,一是前段时间架构组同事的一次性能优化分享,单单日志(log4j2)这一项优化性能就提升了 19 倍,QPS 从1660 升到 32000,被震撼到了。二是最近接手的一个项目中,日志加了彩色打印,按日志的级别设置了不同的高亮颜色,看得我眼花缭乱,用 less 等一些命令查看时还会展.........

JiuQianWan的博客 4581

视图库对接系列(GA-T 1400)一、简单介绍

GA/T 1400《公安视频图像信息应用系统》 是我们需要参考看看的相关文档,里面有对应的标准和介绍,没有这个文档的话可以加群找我要。群的话 我放在最下面了。我们先简单想几个问题, 也就是这个协议主要干什么用的,为什么要有, 能做什么。

qq_37716298的博客 4274

Logback 日志打印对性能影响的探讨

Logback 是一个强大且灵活的日志框架,但在使用过程中需要注意日志记录对性能的影响。通过合理设置日志级别、使用异步日志记录、记录必要的信息、简化日志格式、启用日志轮转和过滤敏感信息等措施,可以最大限度地发挥日志的作用,同时尽量避免因日志打印引起的性能问题。通过 Logback 的原理,我们可以了解到日志记录在提高应用程序的可维护性和可调试性的同时,因为日志生成和格式化会消耗 CPU 资源、日志写入和网络传输引入 I/O 延迟,以及日志事件对象占用内存等方面,也会对系统的性能产生一定的影响。

acegi13579的专栏 1284

SVN使用:使用TortoiseSVN遇到提示请执行“清理”命令的解决方法

作为程序员来说,在团队开发过程中关于代码管理的工具使用并不陌生,比较常用的代码合并管理工具如:Git、SVN等,虽然相关工具的使用并不复杂,但是还是要掌握常用的使用方法,尤其是相关的第三方软件的使用也是极为重要的,而且有时候使用这些三方软件来进行代码管理的时候也会遇到一些问题。本篇博文就来分享一下在SVN使用的时候使用TortoiseSVN遇到提示请执行“清理”命令的解决方法,方便查阅使用。

全沾软贱开发攻城狮 1万+

C#版OpenCV:OpenCVSharp 最详细最全面教程(万字详细总结)

OpenCVSharp 是一个用于 .NET 环境的 OpenCV 包装库,它提供了一种简便的方法来利用 OpenCV 的功能进行图像和视频处理。OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉和机器学习软件库,最初由 Intel 研发并发布。OpenCVSharp 让 C# 和其他 .NET 语言的开发者可以方便地访问 OpenCV 的强大功能。// 打印 OpenCV 版本信息Cv2。

仰望星空的博客 2万+

java日志规范

日志规范

dzl84394的专栏 2207

PPF函数可视化生产可能性边界线(R语言)

假设产品A的生产函数为A = 2 * R1 + R2,产品B的生产函数为B = R1 + 2 * R2,其中A和B分别表示产品A和产品B的产量,R1和R2表示资源1和资源2的分配数量。首先,让我们定义两种产品:产品A和产品B,它们的生产分别需要不同的资源和技术。现在我们已经计算了每种分配比例下的产品A和产品B的产量,接下来我们可以绘制生产可能性边界线。运行完整的代码后,我们将得到一个图形,显示了生产可能性边界线,该线代表经济体在给定资源和技术条件下所能生产的所有产品组合。

2301_79326559的博客 872

异步日志打印的一些事

一、前言最近刚刚结束转岗以来的第一次双11压测,收获颇多,难言言表, 本文就先谈谈异步日志吧,在高并发高流量响应延迟要求比较小的系统中同步打日志已经满足不了需求了,同步打...

技术原始积累 301

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

定制自己的日志工具

虽然 Android 中自带的日志工具功能非常强大,但也不能说是完全没有缺点,例如在打印日志的控制方面就做得不够好。打个比方,你正在编写一个比较庞大的项目,期间为了方便调试,在代码的很多地方都打印了大量的日志。最近项目已经基本完成了,但是却有一个非常让人头疼的问题,之前用于调试的那些日志, 在项目正式上线之后仍然会照常打印, 这样不仅会降低程序的运行效率,还有可能将一些机密性的数据泄露出去。这里就

fuzhongbin的博客 398

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

springboot下mybatis-plus如何打印sql日志和参数到日志文件

springboot下mybatis-plus如何打印sql日志和参数到日志文件

leveretz的博客 1万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

日志打印的规范以及实现方式

1. WHY 为什么要做日志? 原因1:跟踪应用的警告和错误,标识程序运行中的危险操作、错误操作,进而便于在出现问题时排查问题 原因2:跟踪崩溃bug,在开发过程中,日志可以帮助开发者和软件测试人员跟踪程序崩溃的原因 原因3:跟踪性能下降的问题范围,产品所反映出来的性能问题,很难在开发过程中暴露出来,这需要进行全方位的测试跟踪,而通过日志提供的详细执行时间记录可以很方便的找出应用的性能瓶颈 原因...

大圣即大盗 1万+

在高并发的情况下小小的日志打印会严重影响到性能

以前编程不喜欢对每个功能、重要的方法进行日志的格式化输出,即使要输出,也没按照规范进行输出。前段时间,随着我们平台用户量不断增加,出现些问题。当用户遇到问题,就给我们客服打电话。然后客服毫无疑问就来找我们。当我们接收到这样问题的时候,我们首先要定位是什么原因造成的。当时就是因为自己方法中输出的日志很少,而且不规范,所以根本找不到具体原因,虽然最后问题解决了,但是花费很多不必要的时间。 那么我们怎...

u012229449的专栏 9448

日志打印规范

打印日志的目的 不仅是初学者,很多老码农也不能很好的打印日志(注意 : 技术大佬不是本文的目标读者),本质的原因是没有意识到为什么要打印日志,打印日志的目的是什么,这里我就为大家介绍一下。 最重要的原则:在确保日志数量有限的情况下,可以快速定位问题。你仔细想想,在你遇到问题的时候,尤其是生产环境,是不是经常无法快速定位问题,明明打印了日志,却没有上下文,不知道哪个请求,哪个用户,输入参数是什么,然后只能去跟领导说:我要多打一些日志,发布一些才能定位问题。 跟踪应用的BUG/警告。日志可以帮助开发者和软件测

mingyuli的博客 6042

日志实践---日志该如何打印?

快捷跳转写在前面的话运维与监控运营与决策综合性能与影响安全审计 写在前面的话 在过去的两年里,一直在做日志类工具,期间对日志该如何打印思考不少,下面就结合自己的理解与实践尝试着讲讲这个话题。 首先,我们来看下日志的用途及意义,大致包括: 通过日志检索、关键字及业务指标监控,实现更快的问题发现及定位; 通过对日志数据的统计分析或深度挖掘,帮助更好的运营及决策; 从安全审计角度,有助于实现网络安全及...

qq_44078226的博客 2141

javaWeb项目 打印日志

关于日志打印的几点建议以及非最佳实践 日志的打印在软件开发过程中必不可少,一般分为两个大类: 操作日志 系统日志 操作日志,主要针对的是用户,例如在Photoshop软件中会记录自己操作的步骤,便于用户自己查看。 系统日志,主要针对的是软件开发人员(包括测试、维护人员),也就是说这部分的日志用户是看不到的,也就是我们通常所说的debug日志。 在大学中所谓的实践项目或者老师布置的作用中,通常是...

的博客 9272

磁盘满了对日志打印(Logback)的影响

使用Logback日志框架,当磁盘满了后不必惊慌,它不会对应用程序产生太负面影响。仔细考虑,做为一个日志框架本该如此,不能因为写不了日志就抛出异常进而影响应用本身,毕竟,日志终究是个辅助的旁路逻辑,没有它应用也应该work well。底层知识的掌握有助于迅速理解上层应用。在阅读源码的过程中,我发现了非常熟悉的设计逻辑:即类似于Hystrix的断路器和RocketMQ消费失败重试的策略。由于之前有相关经验,因此我很快就能够理解作者的设计意图。

七夜 1538

java打印日志影响性能,log.debug是否会降低性能

I want to write some logs at the debug log which will not be available in the production logs which has info log level. So how will this extra debug logs affect the performance? I mean if we set the l...

weixin_28807463的博客 1338

java日志会影响性能吗

Java日志会影响性能吗? 在软件开发过程中,日志记录是一个非常重要的环节。它可以帮助开发者了解程序的运行状态、调试程序以及追踪问题。然而,日志记录也可能会对程序的性能产生影响。本文将探讨Java日志对性能的影响,并提供一些代码示例和解决方案。 日志记录的基本原理 日志记录通常涉及到以下几个步骤: 日志级别:开发者可以根...

weixin_41310765的博客 498
上一篇: CAS5.3自定义登录校验规则
下一篇: 什么叫日志门面
t梧桐树t
博客等级 码龄7年 352粉丝 181原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值