深入理解Logback异步日志配置及性能优化

目录

      • 直接上成品
        • 1. 分类日志输出
        • 2. 异步输出日志
      • Logback异步日志配置
        • 1. 配置文件说明
        • 2. 异步输出配置示例
      • 性能测试与优化效果
      • 异步日志输出原理
      • 结语

直接上成品

<?xml version="1.0" encoding="utf-8"?>
<configuration><property resource="logback.properties"/><appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.classic.PatternLayout"><pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern></layout></appender><!--获取比info级别高(包括info级别)但除error级别的日志--><appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>DENY</onMatch><onMismatch>ACCEPT</onMismatch></filter><encoder><pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>${LOG_INFO_HOME}//%d.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender><appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><encoder><pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern></encoder><!--滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--路径--><fileNamePattern>${LOG_ERROR_HOME}//%d.log</fileNamePattern><maxHistory>30</maxHistory></rollingPolicy></appender><root level="info"><appender-ref ref="CONSOLE-LOG" /><appender-ref ref="INFO-LOG" /><appender-ref ref="ERROR-LOG" /></root>
</configuration>

在Java应用程序中,日志记录是一项至关重要的任务,它不仅可以帮助我们追踪问题和排除错误,还可以提供对应用程序行为的洞察。然而,对于高负载的生产环境来说,日志记录可能成为性能瓶颈之一。为了解决这个问题,我们可以利用Logback框架的异步日志功能来提高性能并优化日志记录。
部分标签说明

标签,必填标签,用来指定最基础的日志输出级别 标签,添加append 标签,通过使用该标签指定日志的收集策略

name
属性指定appender
命名
class
属性指定输出策略,通常有两种,控制台输出和文件输出,文件输出就是将日志进行一个持久化。ConsoleAppender
将日志输出到控制台

标签,通过使用该标签指定过滤策略

标签指定过滤的类型 标签,使用该标签下的 标签指定日志输出格式。 标签指定收集策略,比如基于时间进行收集 标签指定生成日志保存地址 通过这样配置已经实现了分类分天手机日志的目标了 ### 日志分类与性能优化

在介绍异步日志配置之前,我们先来看看如何通过Logback实现日志分类和性能优化。

1. 分类日志输出

通过Logback的配置,我们可以将不同级别的日志输出到不同的文件中,这样有助于更好地管理日志并提高问题排查的效率。在配置文件中,我们可以指定不同级别的日志输出到不同的文件,并根据时间进行日志文件的切割和保存,从而避免单一文件过大和难以排查问题的情况。

2. 异步输出日志

传统的日志记录方式是同步的,即每次写日志都会进行一次磁盘IO操作,这可能会导致线程阻塞和性能损耗。通过异步输出日志,我们可以将日志写操作放入一个单独的线程中进行处理,从而减少对主线程的影响,提高系统的吞吐量和性能。

Logback异步日志配置

接下来,让我们看看如何通过Logback配置实现异步日志输出。

1. 配置文件说明

在logback的配置文件中,我们可以定义多个appender来实现不同的日志输出方式。通过AsyncAppender,我们可以实现异步输出日志的功能。

2. 异步输出配置示例
<appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>256</queueSize><appender-ref ref="INFO-LOG"/>
</appender><appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender"><discardingThreshold>0</discardingThreshold><queueSize>256</queueSize><appender-ref ref="ERROR-LOG"/>
</appender>

通过以上配置,我们可以实现对INFO级别和ERROR级别日志的异步输出,从而提高系统的性能。

性能测试与优化效果

为了验证异步日志输出的性能优化效果,我们进行了性能测试,并对比了同步输出日志和异步输出日志的性能指标。结果显示,异步输出日志的吞吐量明显高于同步输出日志,性能提升了10多倍,极大地改善了系统的性能表现。

异步日志输出原理

最后,让我们简要了解一下Logback异步日志输出的原理。通过查看Logback框架的源码,我们可以发现,异步日志输出的关键在于将日志写操作放入一个阻塞队列中进行处理,并通过单独的线程来处理队列中的日志,从而避免了对主线程的阻塞,提高了系统的性能。

结语

通过本文的介绍,相信大家对Logback异步日志配置及性能优化有了更深入的理解。在实际项目中,合理配置日志记录方式和优化性能对于提升系统的稳定性和性能至关重要。希望本文能够对大家有所帮助,也欢迎大家关注我的技术分享和交流群,一起探讨更多有趣的技术话题!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/9594.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安防监控/视频汇聚系统EasyCVR+AI智能分析助力解决校园霸凌事件

一、方案背景 校园霸凌这一校园中不应存在的现象&#xff0c;却屡见不鲜&#xff0c;它像一把锋利的刀&#xff0c;深深地刺入那些无辜的心灵&#xff0c;让受害者承受着无尽的痛苦。随着科技的进步与发展&#xff0c;我们应该追求有效、进步的手段来阻止校园霸凌事件的发生&a…

electron 中拦截内嵌页面 beforeunload 的弹窗提示

window 的 beforeunload 事件提示在electron 不兼容&#xff0c;弹窗提示不出来&#xff0c;还会导致莫名其妙的假死问题&#xff0c;下面记录一下解决方法。 1. 如果仅需要拦截弹窗&#xff1a; win.webContents.on(will-prevent-unload, (event) > {event.preventDefault(…

c++ 读写锁对比试验

1.概要 证明如下两点 写锁的时候&#xff0c;读不受影响。写锁的期间&#xff0c;其他线程不能写。 2.代码 // ConsoleApplication2.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 //#include <iostream> #include <thread> #inclu…

解决 Git拉取代码和本地代码丢失问题

git拉取代码&#xff0c;本地写的代码全部为空了&#xff0c;当时都蒙了&#xff0c;最后解决办法是找到对应文件的历史记录 举例&#xff1a;以本地的demo举例&#xff0c;不管是否有git或svn控制&#xff0c;都可以找到历史记录 解决办法&#xff1a; 1、对代码丢失的文件 …

【算法】Dijkstra求最短路算法

TOP提示&#xff1a;Dijkstra算法只适用于不含负权边的情况 Dijkstra算法是一个基于贪心&#xff0c;广搜和动态规划 求图中某点到其他所有点的最短路径的算法 一、步骤 首先我们先总结Dijkstra算法的完整步骤 我们需要一个dis数组存储从起点到达其他节点的最短距离&…

CSS学习笔记之中级教程(一)

1、CSS 布局 - display 属性 1.1 display 属性 display 属性是用于控制布局的最重要的 CSS 属性。 display 属性规定是否/如何显示元素。 每个 HTML 元素都有一个默认的 display 值&#xff0c;具体取决于它的元素类型。大多数元素的默认 display 值为 block 或 inline。 …

每日OJ题_记忆化搜索②_力扣62. 不同路径(三种解法)

目录 力扣62. 不同路径 解析代码1_暴搜递归&#xff08;超时&#xff09; 解析代码2_记忆化搜索 解析代码3_动态规划 力扣62. 不同路径 62. 不同路径 难度 中等 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器…

【MySQL数据库】详解数据库审核工具SQLE的部署及接口调用

SQLE部署及使用 1. 部署SQLE SQLE相信大家都不陌生吧&#xff0c;它是一款开源&#xff0c;支持多场景审核&#xff0c;支持标准化上线流程&#xff0c;原生支持 MySQL 审核且数据库类型可扩展的 SQL审核工具。我们可以基于此工具进行数据库SQL审核&#xff0c;提升SQL脚本质量…

视频怎么打水印?6个软件教你快速进行视频水印制作

视频怎么打水印&#xff1f;6个软件教你快速进行视频水印制作 添加水印是保护视频版权、提升视频专业性的重要手段之一。以下是六款软件&#xff0c;它们能够帮助你快速进行视频水印制作&#xff0c;让你的视频更具个性和专业性&#xff1a; 1.迅捷视频剪辑软件&#xff1a;…

5月白银现货最新行情走势

美联储5月的议息会议举行在即&#xff0c;但从联邦公开市场委员会&#xff08;FOMC&#xff09;近期透露的信息来看&#xff0c;降息似乎并没有迫切性。——美联储理事鲍曼认为通胀存在"上行风险"&#xff0c;明尼阿波利斯联邦储备银行行长卡什卡利提出了今年不降息的…

图片过大怎么处理变小?在线编辑图片工具推荐

在各种平台进行图片上传时&#xff0c;经常会遇到由于图片过大而无法成功上传的问题&#xff0c;为了顺利进行下一步操作&#xff0c;我们需要将图片进行缩小处理&#xff0c;通常情况下&#xff0c;我们可以使用各种软件工具来对图片进行缩小&#xff0c;如何快速有效地调整图…

前端面试题 | 常考题整理

本文为面试中出现的高频次考题&#xff0c;具体还是要看所有题。 目录 css 1、☆介绍下 BFC 及其应用 3、☆浮动清除 17、☆说几个未知宽高元素水平垂直居中方法 js 9、☆箭头函数与普通函数的区别是什么&#xff1f;构造函数可以使用 new 生成实例&#xff0c;那么箭头…

笔记2024

[pip源] pip install xxx -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com https://pypi.doubanio.com/simple https://pypi.tuna.tsinghua.edu.cn/simple [docker] 查看镜像&#xff1a; docker ps docker images docker stop cooling_optimiza…

基于Springboot+Vue的Java项目-电影院购票系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员衣一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

【数据流图】用JointJs实现数据流图(二)

一、流图如何绑定绘制的元素&#xff1f; 通过打印JointJs生成的属性可知&#xff0c;id是不允许被覆盖修改的&#xff0c;但是cid可以。所以通过绑定元素的cid&#xff0c;可实现后续的操作&#xff0c;如查找元素、更改元素属性等。 1. 绑定cid方式示例 let textEle new …

vector实战

vector声明 初始化 获取数据 修改元素值 追加元素 遍历 定义二维的vector 二维vector遍历 #include <iostream> #include <vector>using namespace std;int main(){// vector 声明vector<string> name_vector;// vector 初始化vector<int> sco…

户外公园实景儿童剧本杀小程序系统开发搭建

户外公园实景儿童剧本杀小程序系统开发搭建涉及到的内容包括但不限于以下几个方面&#xff1a; 1. 项目规划&#xff1a;需要考虑场地的大小、设施的配置、剧本的设定等&#xff0c;这些都是开发前的必要考虑因素。 2. 平台开发&#xff1a;基于小程序开发户外公园实景儿童剧本…

Screeps工程化之数量控制模块

前言 将Screeps的代码进行模块化后&#xff0c;可以将各个功能进行分离&#xff0c;互相不影响&#xff0c;本文将会介绍Screeps中如何进行creep的数量控制来维持房间资源的平衡和发展。本文仅为作者本人的游戏思路&#xff0c;并不是最佳实践&#xff0c;如有更好的实现方法可…

十二届蓝桥杯Python组3月中/高级试题 第四题

** 十二届蓝桥杯Python组3月中/高级试题 第四题 ** 第四题&#xff08;难度系数 4&#xff0c;30 个计分点&#xff09; 编程实现&#xff1a; 给定一组包含n个&#xff08;n>3) 正整数数据&#xff0c;和一个正整数M&#xff0c;从这n个正整数中任意拿出两个数相 加&…

【概率论基础】 一篇文章缕清概率论常见概念关系

碎碎念&#xff1a;再写CSDN之前有一小段时间写数模公众号的经历&#xff0c;但是公众号看的人实在太少了&#xff0c;而且排版和公式、代码编辑都没有CSDN这么方便&#xff0c;所以坚持一算时间就没有更新了。公众号大多写的是概念性的基础&#xff0c;稍加修改搬到咱们的主战…