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笔记-日志小结的主要内容,如果未能解决你的问题,请参考以下文章