const (
// 字位共同控制输出日志信息的细节。不能控制输出的顺序和格式。
// 在所有项目后会有一个冒号:2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Ldate = 1 << iota // 日期:2009/01/23
Ltime // 时间:01:23:23
Lmicroseconds // 微秒分辨率:01:23:23.123123(用于增强Ltime位)
Llongfile // 文件全路径名+行号: /a/b/c/d.go:23
Lshortfile // 文件无路径名+行号:d.go:23(会覆盖掉Llongfile)
LstdFlags = Ldate | Ltime // 标准logger的初始值
)
func New(out io.Writer, prefix string, flag int) *Logger
New创建一个Logger。
参数out设置日志信息写入的目的地。
参数prefix会添加到生成的每一条日志前面。
参数flag定义日志的属性(时间、文件等等)。
func (l *Logger) Fatalln(v ...interface{})
Fatalln等价于
{
l.Println(v...);
os.Exit(1)
}
func (l *Logger) Println(v ...interface{})
Println调用l.Output将生成的格式化字符串输出到logger,参数用和fmt.Println相同的方法处理。
func (l *Logger) Output(calldepth int, s string) error
Output写入输出一次日志事件。
参数s包含在Logger根据选项生成的前缀之后要打印的文本。
如果s末尾没有换行会添加换行符。
calldepth用于恢复PC,出于一般性而提供,但目前在所有预定义的路径上它的值都为2。
package main
import (
"log"
"os"
)
var logger *log.Logger
var file *os.File
var err error
func init() {
file, err = os.OpenFile("test.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 666)
if err != nil {
logger.Fatal(err)
}
logger = log.New(file, "", log.LstdFlags)
logger.SetPrefix("Test- ") // 设置日志前缀
logger.SetFlags(log.LstdFlags | log.Lshortfile)
/*
const (
// 字位共同控制输出日志信息的细节。不能控制输出的顺序和格式。
// 在所有项目后会有一个冒号:2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
Ldate = 1 << iota // 日期:2009/01/23
Ltime // 时间:01:23:23
Lmicroseconds // 微秒分辨率:01:23:23.123123(用于增强Ltime位)
Llongfile // 文件全路径名+行号: /a/b/c/d.go:23
Lshortfile // 文件无路径名+行号:d.go:23(会覆盖掉Llongfile)
LstdFlags = Ldate | Ltime // 标准logger的初始值
)
*/
}
func main() {
log.Println("输出日志到命令行终端")
logger.Println("将日志写入文件")
//log.Panicln("在命令行终端输出panic,并中断程序执行")
logger.Panicln("在日志文件中写入panic,并中断程序执行")
log.Fatal("在命令行终端输出日志并执行os.exit(1)")
//logger.Fatal("在日志文件中写入日志并执行os.exit(1)")
defer file.Close()
}
# cat test.log
Test- 2018/12/04 15:51:58 main.go:36: 将日志写入文件
Test- 2018/12/04 15:51:58 main.go:38: 在日志文件中写入panic,并中断程序执行