Golang学习笔记--log模块(三)

Go学习笔记 GOROOT:Go 语言安装根目录的路径。GOPATH:若干工作区目录的路径,我们自己定义的工作空间。GOBIN:GO 程序生成的可执行文件(executable file)的路径。https://goproxy.cn 遇到多个依赖项缺失的情况,可以通过以下步骤尝试解决: 编写测试 源码文件以_test结尾:xxx_test.go 测试方法名以Test开头:func TestXXX(t *testing.T){...} 大写的方法代表包外可访问 阅读详情

Golang的log模块可谓是语言层面上非常基础的一层库,反应的是语言本身的特征而不是一个服务应该怎样怎样。为了方便自己写应用,我按照自己的需求提出一些log的API并重新实现。和Golang的log模块形成互补。

自己的log模块设计

对于我自己的log模块,暂时不需要log4j里面复杂的配置系统,也就不需要父子继承的命名约定。我需要这样一套系统。在主模块中或者基础模块中进行日志的初始化,在需要使用日志的其他模块中通过GetLogger(log String)获得我初始化过的日志,然后通过分等级的API记录不同等级的Log。日志的抬头可以通过设置为几种最常用的模式,无需从配置文件中进行复制控制。不同等级的日志可以定位到不同的输出目的地从而便于分析。可以控制的DEBUG日志。log本身不做exit、panic处理,保持透明,留给用户自己选择。

1.日志分级

对日志进行分级,有: DEBUG INFO WARNING TRACE ERROR FATAL 几个等级。其中DEBUG可以通过开关控制其 关闭、输出到标准输出或者输出到文件。INFO、WARNING则输出到xxx.log的文件中。TRACE输出到xxx.trac文件中,ERROR、FATAL输出到xxx.err文件中。不同等级的日志分别有对应的接口进行输出。

2.统一设置

在基础模块或者初始化模块中通过 NewLogger(path,baseName,logName String,level Level)(Error) 接口初始化日志对象,在需要使用该日志对象的时候通过LogGet(logName String )(* Logger)获得该对象。最后通过 LogClear(logName String) 销毁对象并做清理。

3.一致的打log接口

提供一个包级接口。使用一个默认的Logger对象作为载体。输出到标准输出,其中ERROR和FATAL等级的输出到标准错误。

log.DEBUG(format,v ... interface{})
log.INFO(format,v... interface{})
log.WARNNING(format,v... interface{})
log.TRACE(format,v... interface{})
log.ERROR(format,v... interface{})
log.FATAL(format,v... interface{})

默认的日志格式为 "[NAME][LEVEL][file full path & line number]: log content。

以上接口类似与Printf并可以自动换行,若将format置为""-空字符串,则表现的类似Println可以自动识别出自定义复杂类型,无需人工进行格式定义,行尾自动换行。

通过GetLogger得到的对象类型为

type Logger struct{
    // something here
}

该对象也实现了上述接口: Logger.DEBUG(format,v ... interface{}) Logger.INFO(format,v... interface{}) Logger.WARNNING(format,v... interface{}) Logger.TRACE(format,v... interface{}) Logger.ERROR(format,v... interface{}) Logger.FATAL(format,v... interface{})

同样format为空字符串时表现类似Println。对Logger对象的操作需要首先调用LogInit进行初始化。接口会根据level选择是否进行输出。level 分为:

DEBUG INFO WARNING TRACE ERROR FATAL

等级依次增高。level之前的等级不做输出。

4.看一个实际的例子

package main
import (
    "github.com/cz-it/log4golang/log"
    "fmt"
)
func main(){
    fmt.Println("Testing:")
    err := log.Init()
    if err != nil{
        panic("log init error")
    }
    logger := log.NewLogger("./a/b","test","nimei",log.DEBUG)
    logger.Debug("logger's debug")
    logger.Info("logger's info")
    logger.Warning("logger's Waring")
    logger.Trace("logger's Trace")
    logger.Error("logger's error")
    logger.Fatal("logger's fatal")
    log.Debug("Debug")
    log.Info("Info")
    log.Warning("Warning")
    log.Trace("Trace")
    log.Error("Error")
    log.Fatal("fatal end")
    log.Debug("","logger is",logger)
}

这里首import 我们的log。然后调用 log.Init 初始化包对象。之后既可以通过包级接口将日志 打印到默认的位置,也可以自己调用 log.NewLogger 创建一个logger对象,把路径,日志文件 名以及日志名传给构造函数。

在其他模块可以通过 log.GetLogger 获得之前new出来的log,从而可以在多个文件或者模块中对 同一个日志进行操作。

 

logr:Go的简单日志记录界面 Go的最小记录API 在考虑此软件包之前,请阅读。 我真的很感谢他所说的话,这在很大程度上符合我的经验。 级别选择过多意味着日志不一致。 该软件包基于这些思想提供了一个纯抽象的界面,但有一些曲折。 代码可以仅依赖于此接口,并且可以从调用方注入实际的日志记录实现。 理想情况下,只有main()知道正在使用哪种日志记录实现。 与Dave的想法不同 主要区别在于: Dave基本上建议使用fmt.Printf()来fmt.Printf()日志记录API的概念。 我不同意,尤其是当您考虑诸如输出位置,时间戳,文件和行修饰以及结构化日志记录之类的内容时。 我将API限制为仅两种类型的日志:信息和错误。 信息日志是您要告诉用户的不是错误的内容。 错误日志是错误。 如果您的代码从下级函数调用中收到error ,并且正在记录该error而不返回该错误,请使用错误日志。 信息日志上的详细级别。 这为 立即下载

相关推荐

通过 Android Framework 调用高通 Perf HAL 实现 CPU/GPU 动态调频策略

本文详细介绍了如何通过Android Framework调用高通Perf HAL实现CPU/GPU动态调频策略。文章涵盖HAL交互原理、环境搭建、Power HAL接口实现、PerformanceHintManager应用及温度功耗平衡处理,帮助开发者安全高效地进行性能优化,避免直接操作底层硬件的风险。

keras9composer的博客 257

golang日志库使用与对比

1、log简介 golang内置了log包,实现简单的日志服务。通过调用log包的函数,可以实现简单的日志打印功能。2、log使用 log包中有3个系列的日志打印函数,分别print系列、panic系列、fatal系列。函数系列 作用 print 单纯打印日志 panic 打印日志,抛出panic异常 fatal 打印日志,强制结束程序(os.Exit(1)),defer函数不会执行 2.1 简单示例 func main() { defer fmt.Println(“panic退出前处理”) log.Pri

S_ZaiJiangHu的博客 6952

Chipyard------介绍与环境搭建

Chipyard是一个开源的、可扩展的、集成化的芯片设计平台,旨在帮助芯片设计人员快速、高效地开发自己的定制芯片。由伯克利大学架构研究小组开发,它基于Chisel语言和Scala编程语言,提供了一整套硬件设计工具和流程,包括RTL设计、验证、物理布局、仿真等,以及支持多种芯片体系结构的库和模块。

qq_38798111的博客 9479

Golang log日志以及日志框架logrus

logrus是目前github上star数量最多的日志库。logrus功能强大,性能高效,而且具备高度灵活性,logrus是一个可插拔的,结构化的日志框架,提供了自定义插件的功能,如docker prometheus等,都是用了logrus来记录日志。

啊阿啊啊啊杨的博客 2799

VC Spyglass调试秘籍:从Lint报错到代码修复的完整工作流

本文详细介绍了VC Spyglass调试的完整工作流,重点解析了如何高效定位和修复Lint检查中常见的XMRE-L跨模块引用错误。通过对比GUI与命令行(vc_static_shell)双模式调试技巧,并结合TCL脚本实现批量处理与规则豁免,帮助数字设计工程师系统化地提升代码调试效率与质量。

weixin_29246195的博客 582

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享

【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。

davidkorhenn的博客 1528

Go利用原生的log实现DEBUG,INFO,WARN,ERROR日志组件

二话不说,show your code main.go package main import ( "fmt" "PrintLog/logger" ) func main() { logger.SetConsole(true)//指定是否控制台打印,默认为true,true对比允许控制台打印输出 //指定日志文件备份方式 //第一个参数为日志文件存放目录 //第二个参数为日志文件命名 命名方式如果加时间戳 具体根据需求改 logger.SetRollingDaily("./log",

伍粟的博客 2100

Debian 11 下用hostapd+dnsmasq搭建WiFi热点:从命令行到实战(避坑指南)

本文详细介绍了在Debian 11系统上,使用hostapd和dnsmasq从命令行搭建稳定WiFi热点的完整实战流程。内容涵盖环境准备、无线网卡AP模式检查、服务深度配置,并重点提供了从服务启动失败到客户端无法上网等常见问题的系统性排错指南,帮助用户避开配置陷阱,成功创建可用的无线接入点。

CAT789的专栏 774

【亲测免费】 go-logr/logr: 简洁高效的Go语言日志接口

go-logr/logr 是一个面向Go程序和库设计的轻量级日志接口,其核心目标是提供一种不与特定日志实现绑定的灵活日志处理方式。该项目提倡了一种新的日志记录理念,旨在解决在Go应用程序中引入日志系统时的耦合问题,使得开发者能够在不同的场景下轻松切换日志实现,而不必修改大量日志打印的代码。 ## 项目快速启动 要快速开始使用go-logr/logr,首先你需要将其添加到你的Go项目中。这可以通...

gitblog_00023的博客 814

深度学习中常用的几种卷积(下篇):膨胀卷积、可分离卷积(深度可分离、空间可分离)、分组卷积(附Pytorch测试代码)

膨胀卷积也称为扩张卷积或空洞卷积,一般可通过对标准二维卷积的卷积核设置合适的膨胀率(具体地指卷积核元素之间的距离)实现。合理利用膨胀卷积可在不引入其他参数的同时,扩大输出中元素的感受野,提高特征的全局表示能力。下面通过展示几个不同膨胀率下的卷积核大小以及感受野变化情况,可以更直观的理解:图中灰色为输入,蓝色为卷积核,黄色为输出。1)dilation=1:表示卷积核元素之间距离为1,使用0进行大小为dilation-1=0的填充(这是默认情况),因此。

NorthSmile的博客 9014

具身智能:原理、算法与系统 第1章 具身智能的本质与范畴

从学术定义的角度,具身智能可被界定为"与物理环境进行有目的的能量与信息交换"的智能形式。这一定义揭示了具身智能的两个本质维度:信息处理维度与能量交互维度。与传统人工智能系统仅在信息空间操作不同,具身智能系统必须同时处理信息流与能量流,在物理约束下实现感知、认知与行动的统一。具身智能体具有三个核心构成要素:物理身体(Physical Body)、感知系统(Sensory System)与效应器(Effectors)。这三者共同构成了感知与行动的基础,使智能体能够通过物理交互而非纯粹符号操作来理解世界。

VectorShift的博客 270

golang log模块之log4go使用介绍

https://blog.youkuaiyun.com/Jeanphorn/article/details/78576759 1. 描述 在go语言中,自身已经集成了一定log模块,开发者可以使用go语言自身的log包(import “log”)。也有不少对自身log的开源封装。对于一些简单的开发,自身的log模块就已经足够应付。但是对一些大型,复杂的开发,log需要分门别类的输出,或者通过网络进行输出,...

优秀技术文章收录 2954

127. 答网友疑问:ABAP Function Module 如何支持内表结构不确定的动态输入参数

ABAP RTTI 的全称是 Runtime Type Identification. 使用 RTTI,ABAP 开发人员可以在运行时获取关于数据对象的各种信息,包括其数据类型、字段列表(如果数据是Structure 或者内表的话)以及这些字段的技术属性,比如字段名称,字段数据类型,长度等等。对于这些字段信息,ABAP 提供了一组特殊的类和接口,包括 CL_ABAP_TYPEDESCR、CL_ABAP_STRUCTDESCR、CL_ABAP_TABLEDESCR 等等。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1763

golang 日志分析_golang log4go的日志输出优化详解

前言在go语言中,自身已经集成了一定log模块,开发者可以使用go语言自身的log包(import “log”)。也有不少对自身log的开源封装。对于一些简单的开发,自身的log模块就已经足够应付。但是对一些大型,复杂的开发,log需要分门别类的输出,或者通过网络进行输出,自身log模块将难以应对。当前也有一些比较重量级的log模块,比如logrus,可以实现比较复杂的功能。这里介绍一个轻量级的l...

weixin_30143813的博客 639

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

golang log模块使用

在实际应用中,你可能需要更复杂的日志记录、滚动日志文件等功能。有时候,使用第三方的日志库,如 `logrus`、`zap` 等,可以提供更丰富的功能和更灵活的配置。在这个例子中,我们创建了两个不同的日志记录器,一个用于信息级别,另一个用于警告级别。包的日志输出默认是简单的文本格式。如果你想要更精细的控制和格式化输出,你可以使用。用于格式化字符串,然后将格式化后的字符串传递给。包进行格式化,然后将格式化后的字符串传递给。这允许你按照需要创建任意格式的日志消息。如果你想要更多的格式化控制,你也可以使用。

CHNIM的博客 1273

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

go原生log模块的简易封装

go的原生log模块,功能稍简单。比如不支持自定义输出级别。只有默认的三个可用。println,Fatal,Panic等 以下对go的原生log模块做的一个简易封装: package main import ( "fmt" "io/ioutil" "log" "mime/multipart" "os" "path" ) // Level These are the integ...

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 1495

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Go语言学习笔记—golang标准库log包

golang内置了log包,实现简单的日志服务。通过调用log包的函数,可以实现简单的日志打印功能。

qq_39280718的博客 4246

golang语言log4go日志包使用详解

在go项目的当前文件夹里生成一个logs文件夹,生成test.log的日志文件存放于该路径下。 package main import ( "os" "strings" "github.com/alecthomas/log4go" ) func initConfigs() { log4goInit() log4go.LoadConfiguration(&quo

TigerwolfC的博客 3733

golang log4go 使用说明及丢失日志原因

1. 描述 这个 repository 是从 alecthomas 的 log4go 重构而来的,log4go 是一个类似于用于 Java 编程语言的 log4j 的日志包。源于 Google 的一项 log 工程,官方已经停止维护更新。 仓库地址: https://github.com/jeanphorn/log4go.git 2. 特点 日志输出到终端 日志输出到文件,支持按大小和时间切片 日志输出到网络 日志异步输出 支持 json 文件配置 日志分类 不同类别的日志,输出到不同的printer中

wohu1104的专栏 1473

爱上开源之log4go, 一款简洁的golang的日志包

日志服务是应用程序里不可缺少的一个模块, 在golang里也有不少比较优秀的日志服务框架,比如很多项目都是用的Zap,就是比较常用的golang的日志框架,不过深深的java的使用经历,所以在使用其zap起来,总是觉得不是那么的舒服, 所以在自己的项目里都是使用那个自己封装的log4go的日志包, 注意这里并没有从框架的模式上去进行实现, 所以我这里也称之为一个简洁的golang的日志包。简洁,核心代码只有10K左右,但是功能并不简单。配置文件log4o.xml, 也支持json格式的配置文件, 通过配置l

1135

Golang中log日志包的使用

文章目录1.前言2.log包介绍3.log包的使用3.1 日志输出方法3.2 自定义创建日志对象3.3 封装自定义日志包3.4 log包进一步解析 1.前言 作为后端开发人员,日志文件记录了发生在操作系统或其他软件运行时的事件或状态。技术人员可以通过日志记录进而判断系统的运行状态,寻找导致系统出错、崩溃的成因等。这是我们分析程序问题常用的手段。 2.log包介绍 在Golang中记录日志非常方便,Golang提供了一个简单的日志记录包log,包中定义了一个结构体类型 Logger,是整个包的基础部分,包中的

Korbin的博客 3662

go标准库log模块学习笔记

通过log.New创建独立日志实例,避免全局设置冲突。import ("log""os"// 自定义日志对象logger.Print("自定义日志")logger.Println("写入文件")

cosseen的专栏 588

go语言:log4go

go语言中日志框架log4go用法

Shoper的专栏 7831

golang log模块之log4go文档

介绍 这个存储库是从alecthomas的log4go重构而来的,log4go是一个日志包,类似于Go编程语言的log4j。 支持两个新特性,一个是Json配置样式,另一个是根据类别的不同输出。 特点 记录到控制台 日志文件,支持按大小或时间旋转。 登录到网络,支持tcp和udp 支持xml配置 支持Json样式配置 为日志添加类别 根据不同的输出和不同的用法对日志进行分类。 兼容旧的...

Webben 2213

ant-design-vue Select 组件完全指南:API、事件、模式与源码级实战解析

本文基于 ant-design-vue 官方文档 [Select 组件文档](https://link.gitcode.com/i/ecc15c3b1ea502645690ffc90f0b8613) 展开,系统讲解下拉选择器(Select)的完整 API 体系——从基础用法、全部 props/events/methods 参数表,到 multiple、tags、搜索、虚拟滚动、自定义下拉等高频实战

gitblog_00769的博客 1054
上一篇: Golang学习笔记--log模块(二)
下一篇: golang echo 代码详解之 log 篇
cbmljs
博客等级 码龄10年 329粉丝 130原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值