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 中断 仅输出内容
适用场景 正式日志记录 临时调试输出
相关推荐
(:满天星:)9 小时前
第31篇:块设备与字符设备管理深度解析(基于OpenEuler 24.03)
linux·运维·服务器·网络·centos
野蛮人6号11 小时前
虚拟机网络编译器还原默认设置后VMnet8和VMnet1消失了
网络·vmware·虚拟机网络编译器·vmnet8消失
scuter_yu11 小时前
主流零信任安全产品深度介绍
运维·网络·安全
江苏思维驱动智能研究院有限公司12 小时前
Sophos 网络安全:全球领先的自适应安全解决方案提供商
网络·安全·web安全
面朝大海,春不暖,花不开12 小时前
Java网络编程:TCP/UDP套接字通信详解
java·网络·tcp/ip
ChicagoTypewriter12 小时前
计算机网络中的常用表项梳理
网络·计算机网络·智能路由器
Bruce_Liuxiaowei15 小时前
常见高危端口风险分析与防护指南
网络·网络安全·端口·信息搜集
tmacfrank15 小时前
Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议
android·网络·https
liulilittle16 小时前
深度剖析:OPENPPP2 libtcpip 实现原理与架构设计
开发语言·网络·c++·tcp/ip·智能路由器·tcp·通信
cui_win16 小时前
【内存】Linux 内核优化实战 - net.ipv4.tcp_tw_reuse
linux·网络·tcp/ip