Go语言log库学习

文章目录

日志记录

log库:https://go-zh.org/pkg/log/

syslog:https://go-zh.org/pkg/log/syslog/

  1. 基本的日志功能 :支持日志消息的输出,包括通过log.Printlog.Printflog.Println等函数记录普通日志,以及通过log.Fatallog.Fatalflog.Fatallnlog.Paniclog.Panicflog.Panicln等函数在记录日志后执行特定操作(如程序终止或panic)。
  2. 日志输出位置 :默认情况下,log包的日志输出位置是标准错误输出(stderr)。但可以通过log.SetOutput函数将日志输出重定向到其他位置,如文件或自定义的日志处理器。
  3. 日志格式和前缀 :支持自定义日志消息的前缀和时间格式。通过log.SetPrefix函数可以设置日志消息的前缀,通过log.SetFlags函数可以设置时间格式,如日期、时间、微秒级时间、文件名和行号等。
  4. 并发安全log包本身是并发安全的,可以在多个goroutine中安全地使用。
go 复制代码
func main() {  
    file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)  
    if err != nil {  
        log.Fatal(err)  
    }  
    defer file.Close()  
    // 输出到文件  
    log.SetOutput(file)  
    log.Println("This is a log message written to a file")  
    // 自定义格式
    log.SetPrefix("INFO: ")  
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)  
    log.Println("This is a log message with custom prefix and flags")  
}
go 复制代码
// 不支持同时输出到文件且输出到控制台
// 所以可以这样做:
package main

import (
	"log"
	"os"
)

// 测试log同时写入控制台和文件

func multiLogger(fileLogger, stdLogger *log.Logger, msg string) {
	fileLogger.Println(msg)
	stdLogger.Println(msg)
}

func main() {
	logFile, _ := os.OpenFile("test.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	defer logFile.Close()

	// 创建一个新的logger实例,用于向文件写入日志
	fileLogger := log.New(logFile, "FILE: ", log.Ldate|log.Ltime|log.Lshortfile)

	// 使用标准库logger作为控制台输出
	consoleLogger := log.New(os.Stdout, "CONSOLE: ", log.Ldate|log.Ltime|log.Lshortfile)

	// 输出
	var msg string = "测试log同时写入控制台和文件"
	multiLogger(fileLogger, consoleLogger, msg)
}

Testing

相关推荐
张健11564096483 分钟前
使用信号量限制并发数量
开发语言·c++
糯米团子74921 分钟前
Web Worker
开发语言·前端·javascript
我命由我123451 小时前
JavaScript 开发 - 获取函数名称、获取函数参数数量、获取函数参数名称
开发语言·前端·javascript·css·html·html5·js
白晨并不是很能熬夜1 小时前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
Atri厨1 小时前
X86存储器的段描述符学习随笔
学习
简简单单就是我_hehe1 小时前
后端链路追踪局部采集和全量采集配置说明
java·开发语言
北京理工大学软件工程1 小时前
C#111
开发语言·c#
星幻元宇VR2 小时前
VR航空航天科普设备助力航天知识普及
人工智能·科技·学习·安全·vr·虚拟现实
d111111111d2 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜2 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发