日志输出在任何项目中都极其重要,是有助于后续我们排查问题、解决程序BUG,而规划好的日志输出路径,最能做到清晰直观的展示,本人对golang日志输出做了个小小的进阶,复制直接能够看到效果,希望对各位兄弟姐妹有所帮助!
日志功能
-
创建文件,按小时切割文件,按日志用途划分文件夹
代码如下:
import (
"fmt"
"go.uber.org/zap"
"io"
"log"
"os"
"strings"
"time"
)
var logFile io.Writer
func main() {
Logwrite("大家好,我是自定义日志", "outSysLog")
Logwrite("很开心,欢迎大家使用我!", "insideSysLog")
}
// IsFile
//
// @Description: 判断所给路径是否为文件
// @param path
// @return os.FileInfo
// @return bool
//
func IsFile(path string) (os.FileInfo, bool) {
f, flag := IsExists(path)
return f, flag && !f.IsDir()
}
// IsExists
//
// @Description: 判断路径是否存在
// @param path
// @return os.FileInfo
// @return bool
//
func IsExists(path string) (os.FileInfo, bool) {
f, err := os.Stat(path)
return f, err == nil || os.IsExist(err)
}
// Logwrite
//
// @Description: 写日志
// @param message 日志信息
// @param dirname 日志目录
//
func Logwrite(message string, dirname string) {
//创建文件目录,dirname的命名可以是输出日志的用处,譬如:调用外部系统接口日志:outSysLog
folderName := "log/" + dirname
folderTemp := ""
for _, v := range strings.Split(folderName, "/") {
folderTemp += v
_, IsExistsPath := IsExists(folderTemp)
//判断文件夹是否存在,不存在则创建
if !IsExistsPath {
//创建文件夹代码
err := os.Mkdir(folderTemp, os.ModePerm)
if err != nil {
zap.L().Error("创建日志文件夹出错", zap.Any("报错情况", err))
}
}
folderTemp += "/"
}
now := time.Now() //设置时间变量
//设置日志文件,做好日志文件管理:这里是用时间做文件名称,每个小时生成不同文件。
filefullname := "./" + folderName + "/" + now.Format("20060102") + now.Format("_15") + ".log"
//判断文件是否存在
_, b := IsFile(filefullname)
if b {
//打开文件
logFile, _ = os.OpenFile(filefullname, os.O_APPEND, 0666)
} else {
//新建文件
logFile, _ = os.Create(filefullname)
}
//log.New函数创建新looger
loger := log.New(logFile, "log_", log.Ldate|log.Ltime|log.Lshortfile)
//SetFlags设置输出选项
loger.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
//设置输出前缀,如果不传输前缀,那么就不输出
loger.SetPrefix("log_")
//输出日志文件
err := loger.Output(2, message+"\n")
if err != nil {
zap.L().Error("输出日志文件时报错", zap.Any("报错情况", err))
}
//打印在控制台
fmt.Println(message)
}
-
效果展示
-
控制台输出

-
日志输出
-
按日志用途划分文件夹

-
按小时切割文件

-
信息输出


存在问题
-
此方法没有用日志插件,所以不会去保留配置天数文件,定期清理过期日志,这样就会造成日志文件越来越多,对服务器造成一定的资源压力,建议增加定时任务,定期删除过期日志。
-
.....