Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang Log 学习笔记大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

官方Doc链接

简介

译 :
log 包实现了一个简单的日志库。 它定义了提供格式化输出接口的类型 : Logger。它还提供了一个预先定义好的“标准”Logger,这个Logger往标准出错打印每一条日志以及他的时间。 可以使用接口 : Print[f|ln],和 Panic[f|ln] 来直接使用”标准”Logger, 比起自己手动创建Logger, 他们要方便的多。 Fatal 接口在写完日志后会调用os.Exit(1)Panic 接口在写完日志后会调用panic。( 如果没有配置panic, 也会导致程序退出

[f|ln]

对于本包的接口,往往会有3个版本 : XXX,XXXf 和 XXXln,含义分别是 :打印 , 格式化打印, 打印并换行 。

接口

打印不同等级的log

  • Print[f|ln] 打印
  • Panic[f|ln] 恐慌
  • Fatal[f|ln] 致命
  • Output 类似Println , 可以指定打印调用栈的特定深度的信息

设置logger熟悉

  • SetFlags 陪自己你需要的打印熟悉
    • Ldate = 1 << iota // the date in the local time zone: 2009/01/23
    • Ltime // the time in the local time zone: 01:23:23
    • Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime.
    • Llongfile // full file name and line number: /a/b/c/d.go:23
      *Lshortfile // final file name element and line number: d.go:23. overrides Llongfile
    • LUTC // if Ldate or Ltime is set,use UTC rather than the local time zone
    • LstdFlags = Ldate | Ltime // initial values for the standard logger
  • SetOutput 日志输出到何方, 认stderr, 任何实现 io.Writer 接口的对象
  • SetPrefix 配置你的专属前缀

定制自己的Logger

package log_test

import "log"
import "os"
import "runtime"
import "fmt"

type LogServer struct {
    logger     *log.Logger
    file       *os.File
    thread_num uint32
    file_name  chan String
    log_buffer chan String
    End        chan bool
}

func NewLogger() (*log.Logger,*LogServer) {
    new_log := new(LogServer)
    new_log.logger = log.New(new_log,"",log.Ldate|log.Ltime|log.LshortfilE)
    new_log.file_name = @H_472_107@make(chan String)
    new_log.log_buffer = @H_472_107@make(chan String )
    new_log.End = @H_472_107@make(chan bool)
    go new_log.InitLogThread()
    return new_log.logger,new_log
}

func (this *LogServer) InitLogThread() {
    for {
        SELEct {
        case file_name,ok := <-this.file_name:
            if ok {
                thiS.UseFile(file_name)
            }else {
                fmt.Println("NO")
            }
        case a_log,ok := <-this.log_buffer:
            if ok {
                this.RealLog(a_log)
            }else {
                fmt.Println("NO")
            }
        case end,ok:= <-this.End:
            if end && ok {
                break
            }else {
                fmt.Println("NO")
            }
        }
    }
}

func (this *LogServer) UseFile(file_name String) {
    t_file,err := os.Create(file_name)
    if err != nil || t_file == nil {
        return
    }else {
        if this.file != nil {
            this.file.Close()
        }
        this.file = t_file
    }
}

func (this *LogServer) RealLog(p String) {
    if this.file != nil {
        this.file.Write([]byte(p))
    }else {
        fmt.Println(String(p))
    }
}

func (this *LogServer) Write(p []byte) (n int,err error) {
    this.log_buffer <- String(p)
    return len(p),nil
}

大佬总结

以上是大佬教程为你收集整理的Golang Log 学习笔记全部内容,希望文章能够帮你解决Golang Log 学习笔记所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。