高性能Go语言日志模块dlog使用说明
介绍
dlog是用GO语言实现的一个简单高效、支持文件轮换以及日志分级的日志SDK。其特征如下:
- 采用文件日志类型采用了内存缓存,满足高性能输出日志。
- 支持日志分级,具体分级如下:
- fatal (log.LOG_FATAL)
- error (log.LOG_ERROR)
- warn (log.LOG_WARN)
- info (log.LOG_INFO)
- debug (log.LOG_DEBUG)
- 支持终端日志类型以及可按照时间进行轮换的文件日志类型。
- 文件日志类型支持按照天或小时进行轮换输出。
安装说明
go get github.com/haming123/wego/dlog去github.com下载
输出日志到终端
dlog的缺省日志类型为:TermLogger(终端日志类型),使用TermLogger时不需要初始化,可直接使用日志输出函数输出日志。
package main
import log "dlog"
func main() {log.Debug("This is a Debug Message")log.Info("This is a Info Message")
}
//执行后的输出结果为:
//2021/11/30 07:20:06 [D] main.go:31 This is a Debug Message
//2021/11/30 07:20:06 [I] main.go:32 This is a Debug Info
日志级别
dlog支持5个日志级别,分别是:fatal、error、warn、info、debug。
package main
import log "dlog"
func main() {log.Debug("This is Debug Message")log.Info("This is Info Message")log.Warn("This is Warn Message")log.Error("This is Error Message")log.Fatal("This is Fatal Message")
}
输出格式
dlog支持为每个级别的日志提供了一个xxxf、xxxJSON、xxxXML的函数,用于输出不同格式日志:
package main
import log "dlog"
func main() {log.Debugf("This is a %s Message", "Debug")log.Infof("This is a %s Message", "Info")
}
输出JSON格式的日志:
package main
import log "dlog"
func main() {type User struct {Name stringAge int}user := User{Name:"lisi", Age:12}log.DebugJSON(user)
}
输出XML格式的日志:
package main
import log "dlog"
func main() {type User struct {Name stringAge int}user := User{Name:"lisi", Age:12}log.DebugXML(user)
}
设置JSON/XML的显示格式:
package main
import log "dlog"
func main() {type User struct {Name stringAge int}user := User{Name:"lisi", Age:12}log.ShowIndent(true)log.DebugJSON(user)
}
使用Output输出日志
log.Output函数可以指定任意日志前缀输出日志:
package main
import log "dlog"
func main() {log.Output("[SQL]", "This is SQL Message")log.Output("[DEBUG]", "This is Debug Message")
}
输出日志到文件
FileLogger是dlog提供的一种将日志输出到文件的日志类型。使用FileLogger日志类型前需要对FileLogger进行初始化,为FileLogger指定日志文件的存放目录以及日志文件的轮换方式。
日志文件可以按照天(log.ROTATE_DAY)或小时(log.ROTATE_HOUR)进行进行轮换。
package main
import log "dlog"
func main() {log.InitFileLogger("./logs", log.LOG_DEBUG)defer log.Close()log.Debug("This is a Debug Message")log.Info("This is a Debug Info")
}
dlog为了提高日志组件的性能,采用了基于buffer的文件输出方式,因此在系统退出前需要调用Close()函数将buffer中的数据刷新到文件中。
关闭源码信息的输出
dlog缺省会在日志中输出源码所在的文件以及源码的行号,若不需要显示源码信息,可以使用函数:ShowCaller(show bool)来关闭源码信息的输出。
package main
import log "dlog"
func main() {log.InitFileLoggerHour("./logs", log.LOG_DEBUG)log.ShowCaller(false)defer log.Close()log.Debug("This is a Debug Message")log.Info("This is a Debug Info")
}
性能指标
- 显示caller
goos: windows
goarch: amd64
BenchmarkFileLog
BenchmarkFileLog-6 983985 1079 ns/op 4 allocs/op
- 不显示caller
goos: windows
goarch: amd64
BenchmarkFileLogNoCaller
BenchmarkFileLogNoCaller-6 6514368 172.3 ns/op 0 allocs/op
高性能Go语言日志模块dlog使用说明相关推荐
- 微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
前言 mars 是微信官方的终端基础组件,是一个使用 C++ 编写的业务性无关,平台性无关的基础组件.目前已接入微信 Android.iOS.Mac.Windows.WP 等客户端.现正在筹备开源中, ...
- Android高性能日志模块-Xlog 正篇
Android高性能日志模块-Xlog 前言 日志可以帮助我们定位问题,记录当前程序的运行状态.与后端开发不同的是,Android中的Log原生支持的仅是本地调试和信息记录,并不能很方便地定位远程问题 ...
- 整理:微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
学习网站:微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog 其中涉及知识: 垃圾回收机制 垃圾回收(garbage collection,简称GC)可以自动清空堆中不再使用的对象. ...
- 日志模块的C语言实现
一,模块接口 模块接口比较简单,因为主要只有写日志的操作. 创建日志模块变量 log_t log_new(log_type_t type,const char *file, const char *f ...
- go语言日志收集系统
0.项目地址 完整项目的GitHub地址 https://github.com/taw19960426/learning-go-language/tree/main/go-log-collect 一. ...
- python日志模块_Python之日志处理(logging模块)
转载自:https://www.cnblogs.com/yyds/p/6901864.html 本节内容 日志相关概念 logging模块简介 使用logging提供的模块级别的函数记录日志 logg ...
- pycharm console日志如何输出到txt_Django实战2-自动化运维之配置管理-04:知识扩展-logging日志模块...
日志在程序开发中是非常重要的.在生产环境下,通过日志我们可以查看程序错误信息,处理程序异常.Django利用了python提供的logging模块来记录系统日志. 本节内容参考自Django官方文档, ...
- python 日志输出为json格式文件_Py修行路 python基础 (二十一)logging日志模块 json序列化 正则表达式(re)...
一.日志模块 两种配置方式:1.config函数 2.logger #1.config函数 不能输出到屏幕 #2.logger对象 (获取别人的信息,需要两个数据流:文件流和屏幕流需要将数据从两个数据 ...
- 极简系列|日志模块-clog
日志作为应用程序调试和维护的基本手段被广泛使用,像是谷歌的glog,java领域的log4j,它们都是功能强大的大型日志中间件.可是,在特殊的领域,比如是嵌入式开发领域,由于资源的限制,可能不能直接应 ...
最新文章
- 【转】ASP.NET AJAX入门系列
- RabbitMQ基本概念(一)-RabbitMQ的优劣势及产生背景
- 【Python刷题】_2
- 利用matlab命令画出以下信号的波形,MATLAB实验报告
- 百度AI学习:一、语音识别
- 飞天茅台也可以在天猫上购买了,售价1499元!
- 移动**21*设置无法接通_手机通话质量不好?你可能只差一步设置!
- 免费的自媒体原创度检测工具有哪些?快速帮你提高系统推荐
- 给予树莓派的linux登陆密码,新手教程:如何 SSH 进入树莓派
- KDD 2022论文合集(持续更新中)
- 连接宽带提示服务器无响应,宽带拨号上网服务器无响应是怎么回事
- CentOS6启用密钥登陆
- 量子计算机的算力是多少,量子计算机算力有多强?可能是无数平行宇宙中的计算机在同时计算...
- requests爬虫搜狗微信公众号
- Kafka3.x详细笔记
- linux resolv.conf 重启,Ubuntu关于修改resolv.conf重启失效的问题
- 如何设置无线路由连接无线wifi
- 人工智能里你不知道的那些事!所有人都感兴趣的文章
- 异步四位二进制计数器逻辑图
- Policy Evaluation收敛性、炼丹与数学家
热门文章
- 微信小程序 | 吐血整理的日历及日程时间管理
- unionall的用法(当某条记录为空时,union all是否可以合并此条记录)
- Python 抽取剔除视频帧工具
- C++标准库(第二版).pdf与STL源码剖析.pdf下载
- 项目经理必备的可视化管理工具
- win10链接无线打印服务器,大师给您说win10系统连接惠普6960无线打印机的解决门径...
- qt实现sqlite数据库文件与csv文件相互转换
- 从零开始实现实时多人点歌机器人 (来自网易云音乐)
- java企业考勤,基于jsp的企业员工考勤-JavaEE实现企业员工考勤 - java项目源码
- android游戏特效,直播中送礼物短音效实现(支持网络,本地,assets)