1. 程式人生 > 實用技巧 >golang寫日誌函式

golang寫日誌函式


package common

import (
	"bufio"
	"fmt"
	"os"
	"time"
)


/*自定義日誌檔案*/
func DebugLog(args ...interface{}) error {
	var floderLog = "logs"
	logName := floderLog + "/debug_log." + 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.Print("開啟檔案失敗")
		return err
	}
	defer logFile.Close()
	tm := time.Now().Format("2006-01-02 15:04:05")
	logBody := fmt.Sprintf("%s star============================================>\r\n", tm)
	logFile.WriteString(logBody)
	logBody = fmt.Sprintf("%+v\r\n", args)
	logFile.WriteString(logBody)
	logBody = fmt.Sprintf("\r\n")
	logFile.WriteString(logBody)
	return nil
}

//DebugLog2 自定義日誌檔案
/*
* dir 資料夾名字
* fileName 檔名字
* args 要寫入的資料
 */
func Log(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("%+v\r\n", 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
}