GoLong的学习之路(十三)语法之标准库 log(日志包)的使用
上回书说到,flag的问题。这回说到日志。无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。
文章目录
- log
- 配置logger
- 配置日志前缀
- 配置日志输出位置
- 自定义logger
log
Go语言内置的log包实现了简单的日志服务。
log包定义了Logger类型,该类型提供了一些格式化输出的方法。
本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。
我们可以像下面的代码一样直接通过log包来调用上面提到的方法,默认它们会将日志信息打印到终端界面:
package mainimport ("log"
)func main() {log.Println("这是一条很普通的日志。")v := "很普通的"log.Printf("这是一条%s日志。\n", v)log.Fatalln("这是一条会触发fatal的日志。")log.Panicln("这是一条会触发panic的日志。")
}}
结果
2017/06/19 14:04:17 这是一条很普通的日志。
2017/06/19 14:04:17 这是一条很普通的日志。
logger会打印每条日志信息的日期、时间,默认输出到系统的标准错误。
- Fatal系列函数会在写入日志信息后调用os.Exit(1)
- Panic系列函数会在写入日志信息后panic。
配置logger
默认情况下的logger只会提供日志的时间信息,但是很多情况下我们希望得到更多信息,比如记录该日志的文件名和行号等。
log标准库中为我们提供了定制这些设置的方法。
log标准库中的Flags函数会返回标准logger的输出配置,而SetFlags函数用来设置标准logger的输出配置。
func Flags() int
func SetFlags(flag int)
const (// 控制输出日志信息的细节,不能控制输出的顺序和格式。// 输出的日志在每一项后会有一个冒号分隔:例如2009/01/23 01:23:23.123123 /a/b/c/d.go:23: messageLdate = 1 << iota // 日期:2009/01/23Ltime // 时间:01:23:23Lmicroseconds // 微秒级别的时间:01:23:23.123123(用于增强Ltime位)Llongfile // 文件全路径名+行号: /a/b/c/d.go:23Lshortfile // 文件名+行号:d.go:23(会覆盖掉Llongfile)LUTC // 使用UTC时间LstdFlags = Ldate | Ltime // 标准logger的初始值
)
源码:

有这么多信息所以我们需要,选取我们自己要用的
func main() {//这个就是我们设置输出的日志格式log.SetFlags(log.Llongfile | log.Lmicroseconds | log.Ldate)log.Println("这是一条很普通的日志。")
}
配置日志前缀
func Prefix() string
func SetPrefix(prefix string)
Prefix函数用来查看标准logger的输出前缀SetPrefix函数用来设置输出前缀
这样我们就能够在代码中为我们的日志信息添加指定的前缀,方便之后对日志信息进行检索和处理。
配置日志输出位置
func SetOutput(w io.Writer)
SetOutput函数用来设置标准logger的输出目的地,默认是标准错误输出。(其实就是日志的持久化(就是用一种方式保存起来)。方便出现一些宕机,服务器奔溃,使得整个信息错误信息消失)
自定义logger
log标准库中还提供了一个创建新logger对象的构造函数–New,支持我们创建自己的logger
func New(out io.Writer, prefix string, flag int) *Logger
New创建一个Logger对象。其中,参数out设置日志信息写入的目的地。参数prefix会添加到生成的每一条日志前面。参数flag定义日志的属性(时间、文件等等)。
import ("log""os"
)func main() {logger := log.New(os.Stdout, "<New>", log.Lshortfile|log.Ldate|log.Ltime)logger.Println("这是自定义的logger记录的日志。")}

Go内置的log库功能有限,例如无法满足记录不同级别日志的情况,我们在实际的项目中根据自己的需要选择使用第三方的日志库,如logrus、zap等
相关文章:
GoLong的学习之路(十三)语法之标准库 log(日志包)的使用
上回书说到,flag的问题。这回说到日志。无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。 文章目录 log配置logger配置日志前缀配置日志输出位置自定义logger …...
别处拿来的VUE项目 npm run serve报错
问题现象: 从别处拷贝来的VUE项目,根据说明通过npm install 加载了项目依赖 ,但是运行npm run serve里报错: npm ERR! Missing script: "serve" npm ERR! npm ERR! To see a list of scripts, run: npm ERR! npm ru…...
Istio 运行错误 failed to update resource with server-side apply for obj 问题解决
Istio 环境 kubernetes version: v1.18.2 istio version: v1.10.0运行之后 istio-operator 的日志就抛出下面错误,而且会一直重启 # kubectl get iop -A NAMESPACE NAME REVISION STATUS AGE istio-system iop-pro-cluster…...
分布式事务(Seata)——Seata分布式事务XA模式、AT模式、TCC模式的介绍和对比 结合案例分析AT模式和XA模式【源码】
前言 事务(TRANSACTION)是一个不可分割的逻辑单元,包含了一组数据库操作命令,并且把所有的命令作为一个整体向系统提交,要么都执行、要么都不执行。 事务作为系统中必须考虑的问题,无论是在单体项目还是在分布式项目中都需要进行…...
GMT 格式 转 标准日期格式
需求:有一个时间格式:TUE NOV 14 08:00:00 GMT08:00 2000 我需要将这种格式的时间转换为标准日期格式,并且只修改这种时间格式的时间,不影响其他的 思路:我想到的是用正则来判断,SimpleDateFormat来进行转换…...
【蓝桥杯选拔赛真题01】C++参赛建议 青少年组蓝桥杯C++选拔赛真题 STEMA比赛真题解析
目录 C/C++参赛建议 一、题目要求 1、编程实现 2、输入输出 二、算法分析 <...
小红书为什么流量不好,小红书笔记质量评判标准有哪些?
我们都知道小红书平台强大的种草力与传播力,需要依靠优质笔记的输出来达成。但是很多时候,我们撰写了笔记,却无法被收录,获得流量,这都是因为笔记质量出现了问题。那么小红书为什么流量不好,小红书笔记质量…...
优化改进 | YOLOv2算法超详细解析(包括诞生背景+论文解析+技术原理等)
前言:Hello大家好,我是小哥谈。YOLOv2是YOLO(You Only Look Once)目标检测算法的第二个版本,它在YOLOv1的基础上做了很多改进,包括使用更深的卷积神经网络Darknet-19作为特征提取器、使用Batch Normalizati…...
作为前端开发,你应该知道的这十几个在线免费工具
偶然刷到知乎一位前端大佬 表歌 多篇优秀实用的文章,真的发现宝藏了 以下内容就是他在知乎分享的十几个在线免费工具 1. 页面设计检查清单:https://www.checklist.design/ 页面设计检查清单 通过清单可以检查一些常用容易忽略的设计要素。 2. 背景色…...
【广州华锐互动】关于物理力学的3D实验实操平台
在科学的广阔领域中,物理力学是一个至关重要的分支,它探索了物体在力作用下的运动规律。然而,传统的物理实验往往需要复杂的设备和大量的操作,这对于学生来说是一项巨大的挑战。为了解决这个问题,广州华锐互动开发了物…...
LVS负载均衡(LVS简介、三种工作模式、十种调度算法)
LVS简介 LVS(Linux Virtual Server)是一种基于Linux内核的高可用性负载均衡软件。它通过将客户端请求分发到多个后端真实服务器,提高系统性能和可靠性。LVS支持多种调度算法,如轮询、最少连接、源地址哈希等,用于决定…...
Vue响应式数据的实现原理(手写副作用函数的存储和执行过程)
1.命令式和声明式框架 命令式框架关注过程 声明式框架关注结果(底层对命令式的DOM获取和修改进行了封装) 2.vue2 Object.defineProperty()双向绑定的实现 <body><div id"app"><input type"text" /><h1>…...
内核进程的调度与进程切换
进程被创建到了链表中,如何再进行进一步的调用和调用? 进程调度 void schedule(void); 进程调度 switch_to(next); 进程切换函数 void schedule(void) {int i,next,c;struct task_struct ** p;/* check alarm, wake up any i…...
docker-rabbitmq 安装依赖
出现的问题如下: channel error; protocol method: #method(reply-code404, reply-textNOT_FOUND - no channel error; protocol method: #method<channel.close>(reply-code404, reply-textNOT_FOUND - no 查看rabbitmq 客户端是否存在如…...
(1)(1.9) HC-SR04声纳
文章目录 前言 1 连接到自动驾驶仪 2 参数说明 前言 HC-SR04 声纳是一种价格低廉但量程很短(最远只有 2m)的测距仪,主要设计用于室内,但也成功地在室外的 Copter 上使用过。极短的测距范围使其用途有限。 !Warning…...
06 MIT线性代数-列空间和零空间 Column space Nullspace
1. Vector space Vector space requirements vw and c v are in the space, all combs c v d w are in the space 但是“子空间”和“子集”的概念有区别,所有元素都在原空间之内就可称之为子集,但是要满足对线性运算封闭的子集才能成为子空间 中 2 …...
【每日一题Day360】LC1465切割后面积最大的蛋糕 | 贪心
切割后面积最大的蛋糕【LC1465】 矩形蛋糕的高度为 h 且宽度为 w,给你两个整数数组 horizontalCuts 和 verticalCuts,其中: horizontalCuts[i] 是从矩形蛋糕顶部到第 i 个水平切口的距离verticalCuts[j] 是从矩形蛋糕的左侧到第 j 个竖直切口…...
中国地名信息库
地名是社会基本公共信息,是历史文化的重要载体。 2014年至2018年,国家启动实施并完成了第二次全国地名普查工作,全国共计采集地名1320多万条,修测标绘地名图2.4万多幅,新设更新地名标志68万多块,普遍建立了…...
网络时代下的声音之路:如何在中央新闻媒体发布网评稿
在当今数字时代,信息传播已经变得更加便捷和广泛。各大中央新闻媒体平台为民众提供了一个发布观点、表达意见的平台。在这个背景下,撰写并发布网评稿成为了一种重要的社会参与方式。根据媒介易软文发稿平台的总结,下面是探讨如何在各大中央新…...
Selenium中WebDriver最新Chrome驱动安装教程
😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…...
实战应用:基于快马ai为全栈项目快速构建集成wsl2开发环境
实战应用:基于快马AI为全栈项目快速构建集成WSL2开发环境 最近在准备一个全栈项目,需要同时开发Python Django后端和Vue.js前端。为了保持开发环境的一致性,我决定使用WSL2来搭建开发环境。下面记录下我的完整配置过程,希望能帮助…...
如何用30美元自制AI智能眼镜?OpenGlass开源项目全解析
如何用30美元自制AI智能眼镜?OpenGlass开源项目全解析 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 想象一下,你正在博物馆参观,眼前是一…...
3 鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战
鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战 作者:杨建宾(华夏之光永存) 摘要 本文讲解鸿蒙系统下跨终端数据同步的完整实操流程,从权限配置、分布式数据初始化,到数据读写、同步测试,全部使用通…...
3大核心技术深度解析:D3KeyHelper如何重新定义暗黑3游戏辅助体验
3大核心技术深度解析:D3KeyHelper如何重新定义暗黑3游戏辅助体验 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper D3KeyHelper是一款基于A…...
如何快速配置Zotero插件:终极管理解决方案与插件市场指南
如何快速配置Zotero插件:终极管理解决方案与插件市场指南 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons …...
千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录
千问3.5-2B部署教程(低成本GPU方案):单卡24GB显存跑通开源VL模型实录 1. 千问3.5-2B模型介绍 千问3.5-2B是Qwen系列中的小型视觉语言模型(VL),它能够同时理解图片内容和处理自然语言。这个模型特别适合那些需要在有限硬件资源上…...
Phi-4-mini-reasoning低成本部署:8GB显存即可运行的高性能推理模型
Phi-4-mini-reasoning低成本部署:8GB显存即可运行的高性能推理模型 1. 模型介绍 Phi-4-mini-reasoning 是一款专注于推理任务的文本生成模型,特别适合处理数学题、逻辑题、多步分析和简洁结论输出等场景。与通用聊天模型不同,它采用了"…...
编译期AI推理成为可能?C++27 constexpr增强深度解析,含Clang 19/MSVC 17.10实测基准数据,立即升级避坑指南
第一章:C27 constexpr函数增强的演进脉络与核心动机C27 对 constexpr 函数的扩展并非孤立演进,而是对自 C11 引入 constexpr、经 C14 放宽语义、C17 支持 if/switch 和局部变量、C20 引入 constexpr new/allocator 与虚拟函数等关键里程碑的系统性收敛与…...
Llama-3.2V-11B-cot 安全与合规指南:避免生成有害内容的过滤策略
Llama-3.2V-11B-cot 安全与合规指南:避免生成有害内容的过滤策略 最近在帮一个朋友部署一个基于视觉大模型的应用,他兴奋地给我展示各种有趣的图文对话功能。聊着聊着,他突然问了一个很实际的问题:“这玩意儿要是用户上传一张不合…...
18年产品经理生涯精华:从交付到规划,项目管理、解决方案、业务理解深度解析!
本期访谈只有1位老师,大海老师,18年工作经验,从干交付,到项目管理,再到资深技术专家、解决方案专家,目前做的更多的是业务规划、产品规划,是从一线实战走到真正的专家层面,老师分享的…...
