应用软件的日志系统的设计要求
参照spdlog,简单梳理相关的要求。
概念
常见的概念,如下:
- 开发时日志级别,仅在
Debug
构建时生成的日志,通过宏可以实现。常见的级别有:- TRACE
- DEBUG
- INFO
- WARN
- ERROR
- 运行时日志级别,在
Debug
和Release
构建时均需生效。常见的级别有:- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- 日志记录器,日志对象,用于记录日志。
- 日志记录的格式
- 预定义的关键信息,比如:
- 日志记录的时间
- 日志所在的源文件和代码行号
- 记录日志时运行线程的线程号
- 用户自定义的关键信息,可以采用类似
printf
的格式控制字符。
- 预定义的关键信息,比如:
- 日志存储
- 控制台,比如
std
,标准输出流stderr
,标准错误输出流
- 文件
- 网络存储
- Unix系统的syslog
- Windows系统的event log
- 数据库
- 控制台,比如
配置项
目的是控制应用程序的日志级别,以及不同日志记录器的日志级别。
配置数据可行的来源,比如有:
- 环境变量
- 命令行参数
- 配置文件
基本要求
- 集成简单,比如头文件。
- 使用简单,学习成本低。
- 支持多种平台,比如Linux、安卓、Windows等。
- 支持多线程。
- 支持多种存储方式。
- 支持多种输出目标。
- 高性能,调用时延低。
- 低资源占用,CPU、内存占用低。
高阶特性
- 日志文件管理策略
- 固定时间转储,比如按小时、按天来生成日志文件。
- 固定文件个数转储,比如保留固定的几个日志文件,避免日志文件大量占用硬盘。
- 固定文件大小转储,控制单个日志文件的大小,避免单个日志文件过大,影响后续阅读。
- 日志的事件处理。
- 记录调用栈。
- 支持用户对象的序列化。
应用软件的日志系统的设计要求相关推荐
- 通用日志系统开发【转】
1.前言 中大型软件项目中,日志系统是不可或缺的组成部分.尤其随着软件规模越来越大,内部结构越来越复杂,日志调试成为一种重要的调试方法.本文介绍了一个通用,高效,简洁的日志系统的设计思路. 文章分两部 ...
- linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统
实验目的:熟练掌握权限相关概念和具体操作 实验环境:Red Hat Enterprise Linux Server 5.3 实验步骤: 一.文件权限 二.计划任务 三.日志 一.文件权限 (一)基本权 ...
- 日志系统新贵Loki,确实比笨重的ELK轻
来自:CSDN(作者:linkt1234) 原文链接: https://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云的日志方 ...
- cx_oracle写日志信息_日志系统的设计
笔者在写作本章节的时候,并不敢把此章节的标题叫做<高性能日志系统的设计>,之所以不敢加上"高性能"三个字的原因是: 第一,我对于日志系统设计知识和经验都来自于学习和工作 ...
- 抛弃ELK!Loki日志系统详解!
背景 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的 ...
- 百亿级日志系统架构设计及优化
作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...
- PHP框架中的日志系统
引言 接触过php框架的朋友们可能都知道,日志在项目中的重要作用了,他可以帮助我们定位错误的位置,让程序更友好(处理得当的话不会直接抛出一大堆只有程序猿才真正动的英文),调试的时候也会很方便,还可以记 ...
- 软件架构自学笔记-- 畅途亿级业务日志系统演变过程
畅途亿级业务日志系统演变过程 原文链接:https://www.infoq.cn/article/xWlmaS0-rdIjUgNrTjGI 痛点 你是否遇到过如下情况:线上偶尔出现一个问题,但我们并不 ...
- 几十条业务线日志系统如何收集处理?
在互联网迅猛发展的今天 各大厂发挥十八般武艺的收集用户的各种信息,甚至包括点击的位置,我们也经常发现自己刚搜完一个东西,再打开网页时每个小广告都会出现与之相关联的商品或信息,在感叹智能的同时不惊想 什 ...
最新文章
- 不可思议!乌克兰国防军队的系统账密居然是 admin 和 123456...
- 不用FTP使用SecureCRT上传下载文件,并解决rz、sz command not found异常
- vCenter 6.0安装部署
- SpringMVC学习笔记
- dbunit使用_摆脱困境:在DbUnit数据集中使用空值
- ppt计算机控制系统实例,第部分计算机控制系统的应用实例.ppt
- php 伸展菜单代码,上下伸展的JS菜单
- 数组模拟加法(每日一练 11.30)
- Android RxJava和改造
- 一键获取喜马拉雅音频文件(Python3爬虫)
- 什么是PID,PID的作用。
- 团队建设的不同阶段与管理方式
- 我是ASML,除了技术,还有故事
- 解决 Missing GL version
- HashTab-查看哈希值小工具,一键插件文件md5值
- 毕业设计-基于大数据招聘岗位可视化系统-python
- JDK9-JDK17新特性总结
- 【快速检索,稳定出版,强大委员会Speaker阵容】ICCCS 2022|第7届通信计算机大会
- xdoj试题 字符串压缩
- 【数据库】SQL Server索引碎片和解决方法
热门文章
- Matlab固有频率不对,matlab固有频率表
- 3dsmax 模型创建+原生贴图(多图)
- CSS 过度中ease与ease-in-out的区别(ease曲线)
- 【单片机】单片机时钟
- BOS项目02_02_zTree-通过ajax的获取菜单数据、监听树形菜单的点击事件、读取json文件、Ajax获取数据
- java stax_Java学习:使用StAX解析XML
- python实现日历功能_python学习笔记之—— calendar(日历)模块
- uni-app 入门之 nvue (weex) 爬坑记
- 使用\ctexset设置章节标题
- “智算中心”,按动着新基建的“快进键”