当前位置: 首页 > article >正文

19.go日志包log

核心功能与接口

  1. 基础日志输出
    • Print 系列:支持 Print()Println()Printf(),输出日志不中断程序。
      log.Print("常规日志")          // 输出: 2025/03/18 14:47:13 常规日志 
      log.Printf("格式化: %s", "数据") 
    • Fatal 系列:调用后触发 os.Exit(1) 终止程序,不会执行 defer 函数
      log.Fatal("严重错误") // 输出日志并退出 
    • Panic 系列:输出日志后触发 panic(),可通过 recover() 捕获。
      defer func() { if err := recover(); err != nil {} }()
      log.Panic("触发崩溃")
  2. 预定义 Logger
    • 默认使用 log.Stdout 输出到控制台,可通过 log.SetOutput() 重定向到文件或网络。

配置与定制

  1. 设置日志前缀
    • log.SetPrefix("APP: ") 添加固定前缀,如 APP: 2025/03/18 14:47:13 日志内容
  2. 调整日志格式
    • 通过 log.SetFlags() 组合标志位控制输出内容:
      log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
      // 输出示例: 2025/03/18 14:47:13 main.go:10:  日志内容 
      • 常用标志:Ldate(日期)、Ltime(时间)、Lmicroseconds(微秒)、Llongfile(完整文件路径)、LUTC(UTC 时间)。
  3. 自定义 Logger 对象
    • 使用 log.New() 创建独立 Logger,支持多目标输出:
      
      var (DebugLog = log.New(os.Stdout, "DEBUG: ", log.Ldate|log.Ltime|log.Lshortfile)InfoLog  = log.New(os.Stdout, "INFO: ", log.Ldate|log.Ltime)ErrorLog = log.New(os.Stderr, "ERROR: ", log.Ldate|log.Ltime|log.Llongfile)
      )func main() {DebugLog.Println("调试信息")  
      // DEBUG: 2023/10/01 12:00:00 /path/main.go:15InfoLog.Printf("用户登录: %s", "user123") 
      // INFO: 2023/10/01 12:00:00 用户登录: user123ErrorLog.Fatal("数据库连接失败") 
      // ERROR: 2023/10/01 12:00:00 /path/main.go:18 
      }

    • // 输出到文件
      file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
      if err != nil {log.Fatal("打开文件失败:", err)
      }
      defer file.Close()// 设置全局日志输出
      log.SetOutput(file)// 同时输出到文件和标准错误
      multiWriter := io.MultiWriter(file, os.Stderr)
      log.SetOutput(multiWriter)
    • log.SetOutput(io.Discard) 关闭日志


与 fmt 包的差异

特性log 包fmt 包
输出目标默认 stderr,可自定义(文件/网络)默认 stdout
时间戳支持自动添加
并发安全是(内置互斥锁)
程序中断支持 Fatal/Panic 中断仅输出内容
适用场景正式日志记录临时调试输出

    相关文章:

    19.go日志包log

    核心功能与接口 基础日志输出 Print 系列:支持 Print()、Println()、Printf(),输出日志不中断程序。 log.Print("常规日志") // 输出: 2025/03/18 14:47:13 常规日志 log.Printf("格式化: %s", "数据") Fatal…...

    理解OSPF 特殊区域NSSA和各类LSA特点

    本文基于上文 理解OSPF Stub区域和各类LSA特点 在理解了Stub区域之后,我们再来理解一下NSSA区域,NSSA区域用于需要引入少量外部路由,同时又需要保持Stub区域特性的情况 一、 网络总拓扑图 我们在R1上配置黑洞路由,来模拟NSSA区域…...

    如何通过优化HMI设计大幅提升产品竞争力?

    一、HMI设计的重要性与竞争力提升 HMI(人机交互界面)设计在现代产品开发中扮演着至关重要的角色。良好的HMI设计不仅能够提升用户体验,还能显著增强产品的竞争力。在功能趋同的市场环境中,用户体验成为产品竞争的关键。HMI设计通…...

    Linux信号——信号的处理(3)

    信号是什么时候被处理? 进程从内核态,切换到用户态的时候,信号会被检测处理。 内核态:操作系统的状态,权限级别高 用户态:你自己的状态 内核态和用户态 进程地址空间第三次 所谓的系统调用本质其实是一堆…...

    Pod的调度

    在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,因为很多情况下,我们想控制某些Pod到达某些节点上&…...

    LabVIEW面向对象编程设计方法

    一、概述 面向对象编程(OOP)在软件开发中占据重要地位,尤其是在大规模软件项目中。它与小型程序开发思路不同,更注重未来功能的升级与扩展。在设计阶段,需思考如何构建既灵活又稳定的系统,这涉及众多设计方…...

    Spring常见问题复习

    ############Spring############# Bean的生命周期是什么? BeanFactory和FactoryBean的区别? ApplicationContext和BeanFactory的区别? BeanFactoryAware注解,还有什么其它的Aware注解 BeanFactoryAware方法和Bean注解的方法执行顺…...

    JJJ:generic netlink例程分析

    接嵌入式毕设、课设辅导、技术咨询,欢迎私信 完整代码:github代码仓链接 若想要和指定的generic netlink family通信,如: 994 static struct genl_family genl_ctrl __ro_after_init { // generic netlink子协议995 .module THIS_MODU…...

    Dify票据识别遇到的分支判断不准确问题

    已测试这篇文章中 https://zhuanlan.zhihu.com/p/5465385787 使用多分支条件判断使用不同的大模型识别图片内容 发现了细节问题。在使用时若不注意,分支会出现走向不准的问题。 需要关注部分 下方红框处。1,2后不能跟点。否则会出问。除此之外&#xff0…...

    《全栈+双客户端Turnkey方案》架构设计图

    今天分享一些全栈双客户端Turnkey方案的架构与结构图。 1:三种分布式部署方案:网关方案,超级服务器单服方案,直连逻辑服方案 2: 单服多线程核心架构: 系统服务逻辑服服务 3: 系统服务的多线程池调度设计 4:LogicServer Update与ECS架构&…...

    某碰瓷国赛美赛,号称第三赛事的数模竞赛

    首先我非常不能理解的就是怎么好意思自称第三赛事的呢?下面我们进行一个简单讨论,当然这里不对国赛和美赛进行讨论。首先我们来明确一点,比赛的含金量由什么来定?这个可能大家的评价指标可能不唯一,我通过DeepSeek选取…...

    【代码模板】如何用FILE操作符打开文件?fopen、fclose

    #include "stdio.h" #include "unistd.h"int main(int argc, char *argv[]) {FILE *fp fopen("1.log", "wb");if (!fp) {perror("Failed open 1.log");return -1;}fclose(fp); }关于权限部分参考兄弟篇【代码模板】C语言中…...

    【大模型深度学习】如何估算大模型需要的显存

    一、模型参数量 参数量的单位 参数量指的是模型中所有权重和偏置的数量总和。在大模型中,参数量的单位通常以“百万”(M)或“亿”(B,也常说十亿)来表示。 百万(M):表示…...

    Mysql 数据库编程技术01

    一、数据库基础 1.1 认识数据库 为什么学习数据库 瞬时数据:比如内存中的数据,是不能永久保存的。持久化数据:比如持久化至数据库中或者文档中,能够长久保存。 数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长…...

    Class<?> 和Class<T >有什么区别

    Class<?> 和 Class<T> 在 Java 中都表示 Class 类型的对象&#xff0c;但它们的使用方式和作用略有不同。让我们详细分析它们的区别&#xff1a; 1. Class<?>&#xff08;通配符 Class 类型&#xff09; ? 代表一个未知类型&#xff08;Wildcard&#xf…...

    [自制调试工具]利用模板函数打造通用调试工具

    引言 上一篇文章 我们介绍了调式类工具,这篇文章我们补充一下 点击这里查看 在软件开发的过程中&#xff0c;调试是必不可少的环节。为了能更高效地定位和解决问题&#xff0c;我们常常需要在代码中插入一些调试信息&#xff0c;来输出变量的值、函数的执行状态等。传统的调试…...

    Python地理数据处理 28:基于Arcpy批量操作实现——按属性提取和分区统计

    Arcpy批量操作 1. 批量按属性提取2. 批量分区统计&#xff08;最大值、最小值和像元个数等&#xff09; 1. 批量按属性提取 # -*- coding: cp936 -*- """ PROJECT_NAME: ArcPy FILE_NAME: batch_attribute_extract AUTHOR: JacksonZhao DATE: 2025/04/05 &qu…...

    Mysql慢查询设置 和 建立索引

    1 .mysql慢查询的设置 slow_query_log ON //或 slow_query_log_file /usr/local/mysql/data/slow.log long_query_time 2 修改后重启动mysql 1.1 查看设置后的参数 mysql> show variables like slow_query%; --------------------------------------------------…...

    【Android】界面布局-相对布局RelativeLayout-例子

    题目 完成下面相对布局&#xff0c;要求&#xff1a; 中间的button在整个屏幕的中央&#xff0c;其他的以它为基准排列。Hints&#xff1a;利用layout_toEndof,_toRightof,_toLeftof,_toStartof完成。 结果演示 代码实现 <?xml version"1.0" encoding"u…...

    Spring Boot 中使用 Redis:从入门到实战

    &#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…...

    【ROS】 CMakeLists 文件详解

    【ROS】 CMakeLists文件详解 前言标准的CMAKELIST.TXT文件的组成部分CMake 版本要求和项目名称指定编译器和设置构建规则查找 ROS 依赖消息和服务文件catkin_package设置头文件目录路径添加可执行文件的构建规则设置编译依赖关系&#xff08;构建顺序&#xff09;设置目标文件的…...

    【每日算法】Day 17-1:位图(Bitmap)——十亿级数据去重与快速检索的终极方案(C++实现)

    解锁海量数据处理的极致空间效率&#xff01;今日深入解析位图的核心原理与实战应用&#xff0c;从基础操作到分块优化&#xff0c;彻底掌握仅用1bit存储一个数据的压缩艺术。 一、位图核心思想 位图&#xff08;Bitmap&#xff09; 是一种通过比特位表示数据存在性的数据结构…...

    7-1 素数求和(线性筛实现)

    7-1 素数求和。 分数 10 中等 全屏浏览 切换布局 作者 魏英 单位 浙江科技大学 输入两个正整数m和n&#xff08;1<m<n<500&#xff09;统计并输出m和n之间的素数个数以及这些素数的和。 输入格式: 输入两个正整数m和n&#xff08;1<m<n<500&#xff0…...

    NLP简介及其发展历史

    自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和计算机科学领域中的一个重要分支&#xff0c;致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理&#xff1f…...

    ZKmall开源商城多云高可用架构方案:AWS/Azure/阿里云全栈实践

    随着企业数字化转型的加速&#xff0c;云计算服务已成为IT战略中的核心部分。ZKmall开源商城作为一款高性能的开源商城系统&#xff0c;其在多云环境下的高可用架构方案备受关注。下面将结合AWS、Azure和阿里云三大主流云平台&#xff0c;探讨ZKmall的多云高可用架构全栈实践。…...

    优化 Web 性能:处理非合成动画(Non-Composited Animations)

    在 Web 开发中&#xff0c;动画能够增强用户体验&#xff0c;但低效的动画实现可能导致性能问题。Google 的 Lighthouse 工具在性能审计中特别关注“非合成动画”&#xff08;Non-Composited Animations&#xff09;&#xff0c;指出这些动画可能增加主线程负担&#xff0c;影响…...

    Eliet Chat开发日志:信令服务器注册与通信过程

    目录 1. 架构设计&#xff1a;信令服务器与客户端 2. 选择技术栈 3. 实现信令服务器 4. 客户端实现 5. 测试 6. 下一步计划 日期&#xff1a;2025年4月5日 今天的工作重点是实现两个设备通过信令服务器注册并请求对方公网地址信息&#xff0c;以便能够进行点对点通信。我…...

    leetcode二叉树刷题调试不方便的解决办法

    1. 二叉树不易构建 在leetcode中刷题时&#xff0c;如果没有会员就需要将代码拷贝到本地的编译器进行调试。但是leetcode中有一类题可谓是毒瘤&#xff0c;那就是二叉树的题。 要调试二叉树有关的题需要根据测试用例给出的前序遍历&#xff0c;自己构建一个二叉树&#xff0c;…...

    颜色性格测试:探索你的内在性格色彩

    颜色性格测试&#xff1a;探索你的内在性格色彩 在我们的日常生活中&#xff0c;颜色无处不在&#xff0c;而我们对颜色的偏好往往能反映出我们内在的性格特质。今天我要分享一个有趣的在线工具 —— 颜色性格测试&#xff0c;它能通过你最喜欢的颜色来分析你的性格倾向。 &…...

    hashtable遍历的方法有哪些

    在 Java 中&#xff0c;遍历 Hashtable&#xff08;或其现代替代品 HashMap&#xff09;有多种方式&#xff0c;以下是 6 种常用方法的详细说明和代码示例&#xff1a; 1. 使用 keySet() 增强 for 循环 Hashtable<String, Integer> table new Hashtable<>(); // …...