golang笔记-日志小结

Posted 莱登报

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang笔记-日志小结相关的知识,希望对你有一定的参考价值。

    Golang的log包包含了日志纪录常用功能,前缀设置,格式设置等。

    借助io文件操作可以非常轻松的实现日志打印转存功能,并且,由于引入了sync.Mutex包来保证读写操作,可有效保证原子性,同时支持并发操作(即协程安全-相当于JAVA中的线程安全)。


1. 结构定义:


type Logger struct {

mu     sync.Mutex // ensures atomic writes; protects the following fields

prefix string     // prefix to write at beginning of each line  行前缀

flag   int        // properties  打印格式标志,用于指定每行日志的打印格式

out    io.Writer  // destination for output  用于指定日志输出位置,理论上可以是任务地方,只要实现了io.Writer接口即可

buf    []byte     // for accumulating text to write  内容


2. 常用方法:

   

    Logger对象提供了如下几个方法:


//日志打印的基本方法,其它级别的打印方法都将会调用它

func (l *Logger) Output(calldepth int, s string) error ; 


// Println calls l.Output to print to the logger.

// Arguments are handled in the manner of fmt.Println.

// 一般信息打印方法,相当于JAVA中log的info级别

func (l *Logger) Println(v ...interface{}) {  

        l.Output(2, fmt.Sprintln(v...)) 

}


// Panicln is equivalent to l.Println() followed by a call to panic().  

// 业务异常时使用的方法,该方法会抛出异常,调用方可以用recover捕获,相当于JAVA的ERROR级别(JAVA不会自动抛异常)

func (l *Logger) Panicln(v ...interface{}) { 

s := fmt.Sprintln(v...)

l.Output(2, s)

panic(s) // 通过panic抛出异常,只有上层业务没捕获异常时,程序才会异常中止并退出,

}


// Fatalln is equivalent to l.Println() followed by a call to os.Exit(1).

func (l *Logger) Fatalln(v ...interface{}) { 

l.Output(2, fmt.Sprintln(v...))

os.Exit(1) 

}


3. 使用实例:


    首先打开文件

var logFile = flag.String("log", "H:\\Go\\log\\record.log", "test_file_name")

//打开文件,若果文件不存在就创建一个同名文件并打开

outfile, err := os.OpenFile(*logFile, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) 

if err != nil {

fmt.Println(*outfile, "open failed")

os.Exit(1)

}


    引入文件流,设置日志格式:


//设置log的输出文件,不设置log输出默认为stdout,标准输出流

log.SetOutput(outfile)   

//这里设置了日期(Ldate),打印时间(Ltime),当前go文件的文件名(Lshirtfile)

log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) 


大多错误打印使用场景:

if err != nil {

log.Fatal("TestServer:", err.Error())

}



以上是关于golang笔记-日志小结的主要内容,如果未能解决你的问题,请参考以下文章

Go-Golang学习总结笔记

golang笔记——环境搭建

Golang笔记

golang笔记——命令

golang笔记——包

golang笔记——string