golang写入日志函数

Golang piniu 915浏览 0评论

Golang语言的 os 包中OpenFile 函数,如下所示:

func OpenFile(name string, flag int, perm FileMode) (*File, error) {}

其中 name 是文件的文件名,如果不是在当前路径下运行需要加上具体路径;flag 是文件的处理参数,为 int 类型,根据系统的不同具体值可能有所不同,但是作用是相同的。

  • O_RDONLY:只读模式打开文件;
  • O_WRONLY:只写模式打开文件;
  • O_RDWR:读写模式打开文件;
  • O_APPEND:写操作时将数据附加到文件尾部(追加);
  • O_CREATE:如果不存在将创建一个新文件;
  • O_EXCL:和 O_CREATE 配合使用,文件必须不存在,否则返回一个错误;
  • O_SYNC:当进行一系列写操作时,每次都要等待上次的 I/O 操作完成再进行;
  • O_TRUNC:如果可能,在打开时清空文件。
//自定义日志文件写入函数
/*
* dir 文件夹名字
* fileName 文件名字
* args 要写入的数据
 */
 func Logger(dir string, fileName string, args ...interface{}) error {
	var floderLog = "logs"
	if fileName != "" {
		floderLog = floderLog + "/" + dir
	}
	logName := floderLog + "/" + fileName + "_" + time.Now().Format("2006-01-02") + ".log"
	if _, err := os.Stat(floderLog); err != nil {
		if !os.IsExist(err) {
			os.MkdirAll(floderLog, os.ModePerm)
		}
	}

	logFile, err := os.OpenFile(logName, os.O_APPEND|os.O_RDWR|os.O_CREATE, os.ModePerm)
	if err != nil {
		fmt.Println("打开文件失败 err:", err)
		return err
	}
	defer logFile.Close()
	tm := time.Now().Format("2006-01-02 15:04:05")

	//方法一:os包
	//logBody := fmt.Sprintf("%s star============================================>\r\n", tm)
	//logFile.WriteString(logBody)
	logBody := fmt.Sprintf("[%s] - %+v\r\n", tm, args)
	logFile.WriteString(logBody)
	// logBody = fmt.Sprintf("\r\n")
	// logFile.WriteString(logBody)

	//方法二:bufio包
	// writer := bufio.NewWriter(logFile)
	// logBody := fmt.Sprintf("%s star============================================>\r\n", tm)
	// writer.WriteString(logBody) //写入缓存
	// logBody = fmt.Sprintf("%+v\r\n", args)
	// writer.WriteString(logBody)
	// logBody = fmt.Sprintf("\r\n")
	// writer.WriteString(logBody)

	// writer.Flush() //从缓存写入文件
	return nil
}

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • * 昵称:
  • * 邮箱: