先代码,后说明:
package main
import (
"log"
"os"
)
var logger *log.Logger
func main() {
logger.Println("I write a test log")
}
func init() {
logFile, err := os.OpenFile("./log.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
panic(err)
}
logger = log.New(logFile, "[test]", log.Ltime)
}
os.OpenFile
- 功能:打开文件
- 函数原型:
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
- 返回值:
成功,返回的文件对象
失败,err
错误底层类型是*PathError
- 参数解释:
name
:文件路径及文件名
flag
:文件操作类型码
perm
:文件模式
二参码值 | 释义 |
---|
O_RDONLY | 只读模式打开文件 |
O_RDONLY | 只读模式打开文件 |
O_WRONLY | 只写模式打开文件 |
O_RDWR | 读写模式打开文件 |
O_APPEND | 写操作时将数据附加到文件尾部 |
O_CREATE | 如果不存在将创建一个新文件 |
O_EXCL | 和O_CREATE配合使用,文件必须不存在 |
O_SYNC | 打开文件用于同步I/O |
O_TRUNC | 如果可能,打开时清空文件 |
flag 码值 | 释义 |
---|
0666 | 任何人都可读写,不可执行 |
0777 | 覆盖所有Unix权限位(用于通过&获取类型位) |
log.New
- 功能:创建一个Logger对象
- 函数原型:
func New(out io.Writer, prefix string, flag int) *Logger
- 返回值:
成功,返回的文件对象
失败,err
错误底层类型是*PathError
- 参数解释:
out
:写入文件的对象
prefix
:添加到每一条日志前面的字符串
flag
:日志的属性
flag码值 | 释义 |
---|
Ldate | 日期: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 | 标准logger的初始值 |