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

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:15
          InfoLog.Printf("用户登录: %s", "user123") 
      // INFO: 2023/10/01 12:00:00 用户登录: user123
          ErrorLog.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 中断仅输出内容
适用场景正式日志记录临时调试输出

    相关文章:

  • 工作号做文案素材的网站小学生简短小新闻十条
  • 有域名如何搭建网站重庆seo培训
  • 牙科网站模板2022年新闻摘抄十条简短
  • 有中文网站 怎么做英文网站快速优化seo
  • 做零食网站怎么样免费的关键词优化软件
  • 做模板网站的利与弊香蕉和忘忧草对焦虑的影响
  • 拍摄的婚庆视频有些DAT的视频文件打不开怎么办
  • JavaScript学习21-事件类型之键盘事件
  • 【STM32】Flash详解
  • Mysql的备份还原
  • 算法刷题记录——LeetCode篇(2.4) [第131~140题](持续更新)
  • OFP--2018
  • 用python输出OLED字模库的符号
  • xLua环境控制+xLua的Lua调用C#的1
  • 数据字典的转换逻辑是什么?是在前端转换,后端 Service 层转换还是在数据库层转换?
  • 柱状图中最大的矩形
  • Graylog 索引配置详解与优化建议
  • 纯个人整理,蓝桥杯使用的算法模板day4(图论 最小生成树问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
  • [论文阅读]PMC-LLaMA: Towards Building Open-source Language Models for Medicine
  • 自然语言处理
  • 《安富莱嵌入式周报》第352期:手持开源终端,基于参数阵列的定向扬声器,炫酷ASCII播放器,PCB电阻箱,支持1Ω到500KΩ,Pebble智能手表代码重构
  • 中国剩余定理
  • AI重构SEO关键词智能布局
  • TS中is关键字详解
  • Day51 | 3. 无重复字符的最长子串、12. 整数转罗马数字、49. 字母异位词分组、73. 矩阵置零
  • Class<?> 和Class<T >有什么区别