go语言中的log 包详解

Go语言的log包提供了用于记录日志的基本功能。相比fmt包,log包增加了时间戳、日志级别等日志管理功能,非常适合用于调试和记录运行信息。下面是对log包的详细说明,以及它与fmt包的区别。

1. log包的基础功能

log包中包含一系列函数,可以用于打印带时间戳的日志信息,默认将日志写入标准错误输出(os.Stderr),并在每条日志的开头添加时间戳。

常用函数
  • log.Print:基本日志输出函数,类似于fmt.Print,但会在输出前添加时间戳。
  • log.Println:类似于fmt.Println,会在输出前添加时间戳,并在结尾添加换行符。
  • log.Printf:类似于fmt.Printf,支持格式化输出,并在输出前添加时间戳。

示例代码:

package main
import "log"func main() {log.Print("This is a log message.")log.Println("This is another log message.")log.Printf("Formatted log: %d + %d = %d", 2, 3, 2+3)
}

2. log包的日志级别函数

log包还提供了两种特殊的日志函数,用于处理错误和程序退出的情况:

  • log.Fatal:用于记录严重的错误信息,输出日志后会调用os.Exit(1),终止程序执行。
  • log.Panic:用于记录错误信息,同时调用panic,引发恐慌(程序崩溃并抛出堆栈信息),适合用于调试和处理非正常情况。

示例代码:

package main
import "log"func main() {log.Print("This is a normal log.")log.Fatal("This is a fatal error log, program will exit.")  // 输出后程序会退出log.Panic("This will not be executed because of Fatal above.")
}

3. 自定义日志输出位置

log包默认将日志输出到标准错误流(os.Stderr),但是可以通过log.SetOutput方法自定义输出位置。可以将日志输出到文件、网络或其他符合io.Writer接口的目标。

示例:将日志输出到文件
package main
import ("log""os"
)func main() {file, err := os.Create("app.log")if err != nil {log.Fatal("Failed to create log file:", err)}defer file.Close()log.SetOutput(file)  // 将日志输出设置为文件log.Println("This log will be written to app.log file.")
}

4. 自定义日志前缀和标记

log包允许自定义日志的前缀和格式,帮助识别日志的来源或类型。使用log.SetPrefix方法可以设置日志的前缀,使用log.SetFlags可以控制日志的标记。

日志标记

log包提供了以下几个标记(使用SetFlags设置):

  • log.Ldate:日期(yyyy/mm/dd)。
  • log.Ltime:时间(hh:mm)。
  • log.Lmicroseconds:微秒级时间。
  • log.Llongfile:完整文件路径和行号。
  • log.Lshortfile:简短文件名和行号。
  • log.LUTC:使用UTC时间。
  • log.LstdFlags:默认标记,等价于log.Ldate | log.Ltime
示例:自定义日志前缀和标记
package main
import "log"func main() {log.SetPrefix("INFO: ")                  // 设置日志前缀log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)  // 设置日志标记log.Println("This is a customized log message.")
}

5. 创建自定义的日志记录器

使用log.New可以创建自定义的日志记录器(Logger),并指定不同的输出目标、前缀和标记。多个日志记录器可以记录不同类型的日志信息。

示例:创建两个不同的日志记录器
package main
import ("log""os"
)func main() {// 创建错误日志记录器,输出到标准错误errorLogger := log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Lshortfile)// 创建信息日志记录器,输出到文件infoFile, err := os.Create("info.log")if err != nil {log.Fatal(err)}defer infoFile.Close()infoLogger := log.New(infoFile, "INFO: ", log.Ldate|log.Ltime)infoLogger.Println("This is an informational message.")errorLogger.Println("This is an error message.")
}

log包与fmt包的区别

  1. 用途不同

    • fmt包主要用于格式化输入和输出,适合输出一般信息,不具备日志管理功能。
    • log包专为日志设计,提供日志记录功能,适合程序中的重要信息、错误、调试信息等的输出。
  2. 输出内容不同

    • fmt包输出没有时间戳,默认不包含额外信息。
    • log包输出包含时间戳,且可以设置额外的标记和前缀。
  3. 输出位置

    • fmt包的输出目标默认为标准输出(os.Stdout),可以通过fmt.Fprint将输出定向到指定目标。
    • log包的默认输出为标准错误(os.Stderr),且可以通过log.SetOutput轻松修改输出目标。
  4. 日志级别

    • fmt包没有日志级别的概念。
    • log包提供了日志级别的支持(如FatalPanic)。
  5. 程序控制

    • fmt包的函数不会影响程序的控制流程。
    • log.Fatal会终止程序,log.Panic会引发恐慌,帮助处理异常情况。

总结

  • fmt适合通用的格式化输出,如打印普通消息、调试输出等。
  • log适合用于正式的日志记录,提供时间戳、日志级别、日志标记和自定义输出等特性,能够更好地记录和追踪程序的运行状态。

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

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

相关文章

Android Profiler 内存分析

Android studio(下面简称AS)为App提供的性能分析工具,在AS3.0替换掉旧的分析工具,对于其使用方法,官方也有对应的介绍:Android Profiler 对于使用方法,我只用到比较简单的功能,高级的…

[ Linux 命令基础 3 ] Linux 命令详解-文件和目录管理命令

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

HTMLCSS: 实现可爱的冰墩墩

效果演示 HTML <div class"wrap"><div class"body"></div><div class"ear"></div><div class"ear rightEar"></div><div class"leftHand"></div><div class"…

【电力系统】永磁同步电机调速系统带有扰动观测器

【电力系统】永磁同步电机调速系统带有扰动观测器( DOB)的最优滑模控制、改进补偿滑模控制、传统滑模、PID控制研究 摘要 本文研究了永磁同步电机&#xff08;PMSM&#xff09;调速系统中的不同控制策略&#xff0c;包括最优滑模控制、改进补偿滑模控制、传统滑模控制以及PID控…

TVM计算图分割--分割方式

文章目录 TVM中的计算图分割方式1. Partition Pass2. dataflow_pattern3. 内置图分割接口4. Pipeline Executor5. BYOC框架6. Collage7. UMA深度学习模型通常是用计算图来表示的。计算图是一种有向无环图,其中节点代表算子,表示一个操作,节点之间的边表示算子之间的数据依赖…

如何使用IDEA创建Maven/SSM工程?

鉴于很多学校还在教授SSMJSP&#xff0c;很多同学不会使用IDEA创建Maven工程&#xff0c;这里进行说明 windows下安装jdk并配置环境 添加链接描述Windows下安装Maven并配置环境 首先你要本地安装jdk&#xff0c;Maven并配置基础环境变量&#xff0c;然后对IDEA进行jdk、Mave…

大数据新视界 -- 大数据大厂之 Impala 性能优化:优化数据加载的实战技巧(下)(16/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

从0开始机器学习--Day23--支持向量机

经过前面的学习&#xff0c;我们已经知道在解决问题时&#xff0c;重要的不仅仅是要在算法A或算法B中选择更优的&#xff0c;而是考虑怎么选择用于学习算法的特征和正则化参数&#xff0c;相比神经网络和逻辑回归&#xff0c;支持向量机在这两个方面做得更好。 优化目标(Optimi…

macOS 设置固定IP

文章目录 以太网Wifi![请添加图片描述](https://i-blog.csdnimg.cn/direct/65546e966cae4b2fa93ec9f0f87009d8.png) 基于 macOS 15.1 以太网 Wifi

Pandas | 数据分析时将特定列转换为数字类型 float64 或 int64的方法

类型转换 传统方法astype使用value_counts统计通过apply替换并使用astype转换 pd.to_numericx对连续变量进行转化⭐参数&#xff1a;返回值&#xff1a;示例代码&#xff1a; isnull不会检查空字符串 数据准备 有一组数据信息如下&#xff0c;其中主要将TotalCharges、MonthlyC…

HarmonyOS Next 实战卡片开发 02

HarmonyOS Next 实战卡片开发 02 卡片开发中&#xff0c;还有一个难点是显示图片。其中分为显示本地图片和显示网络图片 显示本地图片 卡片可以显示本地图片&#xff0c;如存放在应用临时目录下的图片。路径比如 /data/app/el2/100/base/你的项目boundleName/temp/123.png 以…

双十一云服务器抢购后,用SD-WAN连通多云网络

双十一个个云厂商都有一定的优惠&#xff0c;我在阿里云和腾讯云都购买了服务器&#xff0c;原本主要是使用的阿里云&#xff0c;一堆乱七八糟的东西都是部署在阿里云的&#xff0c;现在买了一台腾讯云之后就在思考一个问题&#xff0c;怎么在腾讯云使用阿里云原本部署的服务。…

从0开始学docker (每日更新 24-11-7)

docker网络基础 docker容器网络模型 容器网络项目libnetwork&#xff1a;docker网络架构基于一套称为容器网络模型&#xff08;CNM&#xff09;的接口 CNM高层架构 包括&#xff1a; 沙箱&#xff08;Sandbox&#xff09;&#xff1a;又称沙盒&#xff0c;包含容器的网络栈…

Linux学习笔记之组管理和权限管理

组管理 文件/目录 所有者 一般文件所有者是文件的创建者&#xff0c;谁创建了该文件&#xff0c;就自然成为该文件的所有者 ls -ahl &#xff08;查看文件的所有者&#xff09; chown 用户名 文件名 &#xff08;修改文件所有者&#xff09; 文件/目录 所在组 当某个用户…

MySQL 中的索引下推功能

看到索引&#xff0c;应该大家都可以联想到这个是和查询效率有关系的&#xff0c;既然有这个功能&#xff0c;那么那句古话说的好啊&#xff1a;存在即合理。那么这个就是说有了这个功能&#xff0c;可以提升查询效率。 什么是索引下推 我们先有一个大概的理解&#xff1a;在…

CSP/信奥赛C++语法基础刷题训练(1):洛谷P5715 :三位数排序

CSP/信奥赛C语法基础刷题训练&#xff08;1&#xff09;&#xff1a;洛谷P5715 &#xff1a;三位数排序 题目描述 给出三个整数 a , b , c ( 0 ≤ a , b , c ≤ 100 ) a,b,c(0\le a,b,c \le 100) a,b,c(0≤a,b,c≤100)&#xff0c;要求把这三位整数从小到大排序。 输入格式 …

准确--FastDFS快速单节点部署

FastDFS单节点部署 1. 系统准备 # 查看操作系统信息&#xff08;适用于麒麟V10&#xff09; cat /etc/os-release# 安装必要的软件包 yum -y install gcc gcc-c perl zlib-devel unzip2. 准备 FastDFS 环境 cd /usr/local/fastdfs# 下载必要包&#xff08;若有访问限制&…

国标GB28181视频平台EasyCVR私有化部署视频平台对接监控录像机NVR时,录像机“资源不足”是什么原因?

EasyCVR视频融合云平台&#xff0c;是TSINGSEE青犀视频“云边端”架构体系中的“云平台”系列之一&#xff0c;是一款针对大中型项目设计的跨区域、网络化、视频监控综合管理系统平台&#xff0c;通过接入视频监控设备及视频平台&#xff0c;实现视频数据的集中汇聚、融合管理、…

【智谱开放平台-注册/登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

计算机新手练级攻略——如何搜索问题

目录 计算机学生新手练级攻略——如何搜索问题1.明确搜索意图2.使用精确关键词3.使用专业引擎搜索4.利用好技术社区1. Stack Overflow2. GitHub3. IEEE Xplore4. DBLP 5.使用代码搜索工具1. GitHub 代码搜索2. Stack Overflow 代码搜索3. Papers with Code4. IEEE Xplore 6.查阅…