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

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

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

相关文章

苹果秋季发布会官宣,新款Mac将搭载M3芯片,来势迅猛!

苹果宣布将于 10 月 31 日上午 8 点&#xff08;北京时间&#xff09;举行发布会&#xff0c;这次发布会的主题是「来势迅猛」&#xff0c;旨在为全球的苹果粉丝和科技爱好者带来令人期待的新品发布。这次发布会引人瞩目&#xff0c;因为它将聚焦在 Mac 系列产品以及全新的 M3 …

I/O 模型学习笔记【全面理解BIO/NIO/AIO】

文章目录 I/O 模型什么是 I/O 模型Java支持3种I/O模型BIO&#xff08;Blocking I/O&#xff09;NIO&#xff08;Non-blocking I/O&#xff09;AIO&#xff08;Asynchronous I/O&#xff09; BIO、NIO、AIO适用场景分析 java BIOJava BIO 基本介绍Java BIO 编程流程一个栗子实现…

系列十八、请描述下bean的生命周期

一、概述 bean的生命周期是指bean从创建到销毁的整个过程。 二、生命周期 bean的生命周期是指bean从创建到销毁的整个过程&#xff0c;大致可以分为如下四个过程&#xff1a; 2.1、实例化 实例化可以通过如下几种方式完成&#xff1a;&#xff08;参考系列十五&#xff09…

王道p149 7.二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法(c语言代码实现)

采用层次遍历算法&#xff0c;将所有结点加入队列(包括空结点)。 如果没有左孩子&#xff0c;就看有没有右孩子&#xff0c;如果有右孩子&#xff0c;那么不为完全二叉树。 如果有左孩子&#xff0c;且之前不存在缺孩子的结点&#xff0c;左孩子进队&#xff0c;如果有右孩子…

树莓派基金会近日发布了新版基于 Debian 的树莓派操作系统

树莓派基金会&#xff08;Raspberry Pi Foundation&#xff09;近日发布了新版基于 Debian 的树莓派操作系统&#xff08;Raspberry Pi OS&#xff09;&#xff0c;为树莓派单板电脑带来了新的书虫基础和一些重大变化。 新版 Raspberry Pi OS 的最大变化是它现在基于最新的 Deb…

QQ云端机器人登录系统php源码开心版

可能很多人不知道这源码有什么用&#xff0c;这款源码主要是针对群机器人爱好者的&#xff0c; 这是一个通过对接挂机宝里面机器人框架的一个网页站点&#xff0c; 用户通过网页登录 QQ 账号至挂机宝里面框架&#xff08;可扫码登录、账密登录、跳转 QQ 快捷登录&#xff09;…

JAVA毕业设计104—基于Java+Springboot+Vue的医院预约挂号小程序(源码+数据库)

基于JavaSpringbootVue的医院预约挂号小程序(源码数据库)104 一、系统介绍 本系统前后端分离带小程序 小程序&#xff08;用户端&#xff09;&#xff0c;后台管理系统&#xff08;管理员&#xff0c;医生&#xff09; 小程序&#xff1a; 预约挂号&#xff0c;就诊充值&…

sqoop和flume简单安装配置使用

1. Sqoop 1.1 Sqoop介绍 Sqoop 是一个在结构化数据和 Hadoop 之间进行批量数据迁移的工具 结构化数据可以是MySQL、Oracle等关系型数据库 把关系型数据库的数据导入到 Hadoop 与其相关的系统 把数据从 Hadoop 系统里抽取并导出到关系型数据库里 底层用 MapReduce 实现数据 …

【LeetCode每日一题合集】2023.10.16-2023.10.22(只出现一次的数字Ⅲ)

文章目录 260. 只出现一次的数字 III⭐&#xff08;异或&#xff09;&#x1f402;2652. 倍数求和解法1——枚举模拟解法2—— O ( 1 ) O(1) O(1)容斥原理相似题目——1201. 丑数 III&#xff08;二分查找容斥原理&#xff09; 2530. 执行 K 次操作后的最大分数解法1——贪心优…

【算法】滑动窗口题单——4.不定长滑动窗口(求子数组个数)

文章目录 前言2799. 统计完全子数组的数目解法1——枚举右端点&#xff0c;移动左端点解法2——枚举左端点&#xff0c;扩展右端点 713. 乘积小于 K 的子数组1358. 包含所有三种字符的子字符串数目2302. 统计得分小于 K 的子数组数目2537. 统计好子数组的数目2762. 不间断子数组…

<蓝桥杯软件赛>零基础备赛20周--第2周

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共20周&#xff08;读者可以按…

假脱机技术(SPOOLing技术)

文章目录 1.什么是脱机技术1.脱机技术解决的问题 2.假脱机技术的实现原理1.输入井和输出井2.输入进程和输出进程3,输入缓冲区和输出缓冲区 3.共享打印机的原理分析1.把独占式的打印机改造成共享设备 1.什么是脱机技术 脱机&#xff1a;脱离主机的控制进行的输入输出操作。 批处…

在声明和定义的一些小坑

1、静态成员变量的初始化 静态成员变量声明在 .h 头文件文件中&#xff0c;初始化应该在 .cpp 源文件中 就会出现"找到一个或多个多重定义的符号",下面的错误 class MyString{public:typedef char* iterator;typedef const char* const_iterator;iterator begin();…

QGIS008:QGIS拓扑检查、修改及验证

摘要&#xff1a;本文介绍使用QGIS拓扑检查器和几何图形检查器检查图层的拓扑错误&#xff0c;修改拓扑错误&#xff0c;并对修改后的图层进行错误验证。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Vy2s-KYS-XJevqHNdavv9A?pwdf06o 提取码&#xff1a…

C#,数值计算——分类与推理,基座向量机高斯核(Svmgausskernel)的计算方法与源程序

No logical, not an AI. 你现在能阅读到的大量AI都是假AI&#xff0c;包括 。。。GPT 在内&#xff0c;没有任何鸟用。凡为 ...GPT 发声者均为假学者。 No log, no AI. 1 文本格式 using System; namespace Legalsoft.Truffer { public class Svmgausskernel : Svmgen…

适用于 Windows 10 和 Windows 11 设备的笔记本电脑管理软件

便携式计算机管理软件使 IT 管理员能够简化企业中使用的便携式计算机的部署和管理&#xff0c;当今大多数员工使用Windows 笔记本电脑作为他们的主要工作机器&#xff0c;他们确实已成为几乎每个组织不可或缺的一部分。由于与台式机相比&#xff0c;笔记本电脑足够便携&#xf…

文心一言简单体验

百度正式发布文心一言&#xff0c;文心一言 这里的插件模式挺有意思&#xff1a; 测试了一下图解说明&#xff0c;随意上传了一张图片&#xff1a; 提供图解让反过来画&#xff0c;抓住了部分重点&#xff0c;但是还是和原图有比较大的差异&#xff01; 百宝箱 暂未逐个体验&am…

第八节——Vue渲染列表+key作用

一、列表渲染 vue中使用v-for指令进行列表 <template><div><!-- item 代表 当前循环的每一项 --><!-- index 代表 当前循环的下标--><!-- 注意&#xff1a;必须要加key--><div v-for"(item, index) in arr" :key"index"…

【Flutter】自定义分段选择器Slider

【Flutter】ZFJ自定义分段选择器Slider 前言 在开发一个APP的时候&#xff0c;需要用到一个分段选择器&#xff0c;系统的不满足就自己自定义了一个&#xff1b; 可以自定义节点的数量、自定义节点的大小、自定义滑竿的粗细&#xff0c;自定义气泡的有无等等… 基本上满足你…

蓝桥杯第 2 场算法双周赛 第2题 铺地板【算法赛】c++ 数学思维

题目 铺地板https://www.lanqiao.cn/problems/5887/learning/?contest_id145 问题描述 小蓝家要装修了&#xff0c;小蓝爸爸买来了很多块&#xff08;你可以理解为数量无限&#xff09;2323 规格的地砖&#xff0c;小蓝家的地板是 nm 规格的&#xff0c;小蓝想问你&#xf…