阅读 872

go 输出日志文件:goland 输出日志文件 进阶版

go 输出日志文件:goland 输出日志文件 进阶版

最近写 TCP 通讯,很多时候需要做日志去分析,所以写了个 loghelp,简单又方便。哈哈哈~,希望能帮到大家。

关于:go / goland : log 日志

我自己用起来,感觉是很舒服的:对 log 的使用,我比较粗浅,也希望各位大佬能多多指点

进阶版:可以自己创建文件,按小时分文件,按天分文件夹。非常舒适。下面是源码:复制后就可以直接运行看结果

/*
* Copyright(C),2019-2020, email: 952651117@qq.com
* Author:  dao
* Version: 1.0.0
* Date:    2021/6/11 13:54
* Description:
*
 */

package main

import (
	"fmt"
	"io"
	"log"
	"os"
	"time"
        "strings"
)

var logFile io.Writer

/**
 * @Description:判断所给路径是否为文件
 * @param path
 * @return os.FileInfo
 * @return bool
 */

func IsFile(path string) (os.FileInfo, bool) {
	f, flag := IsExists(path)
	return f, flag && !f.IsDir()
}

/**
 * @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)
}


/**
 * @Description: 写日志
 * @param msg
 * @param title
 */

func Logwrite(msg string, title string) {
	//设置时间变量
	now := time.Now()
	//前提:创建一个 log 文件夹到根目录(这样最好了)。如果文件目录不存在,也可以使用下面代码去创建文件目录
	folderName := "log/" + now.Format("20060102")
	folderTemp := ""
	for _, v := range strings.Split(folderName, "/") {
		//判断文件,如果不存在,那么就创建
		folderTemp += v
		_, IsExistsPath := IsExists(folderTemp)
		if !IsExistsPath {
			//创建文件夹代码
			os.Mkdir(folderTemp, os.ModePerm)
		}
		folderTemp += "/"
	}

	//设置日志文件,做好日志文件管理:这里是用时间做文件,每个小时生成不同文件
	filefullname := "./" + folderName + "/" + now.Format("20060102") + now.Format("_15") + ".txt"
	//判断文件是否存在
	_, b := IsFile(filefullname)
	if b {
		//打开文件,
		logFile, _ = os.OpenFile(filefullname, os.O_APPEND, 0666)
	} else {
		//新建文件
		logFile, _ = os.Create(filefullname)
	}

	loger := log.New(logFile, "log_", log.Ldate|log.Ltime|log.Lshortfile)
	//SetFlags设置输出选项
	loger.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
	//设置输出前缀,如果不传输前缀,那么就不输出
	if title == "" {
		loger.SetPrefix("log_")
	} else {
		loger.SetPrefix(title + "_")
	}

	//设置头信息
	rs := []rune(msg)
	msghead := ""
	//为了美观:如果超过20个字符就换行
	if len(rs) >= 20 {
		msghead = string(rs[0:20])
		//输出一条日志:头信息,10位,可以通过上面的参数来调整:rs[0:10]
		loger.Output(2, msghead+"[省略...]\n"+msg+"\n")
	} else {
		loger.Output(2, msg+"\n")
	}
	//打印在控制台
	fmt.Println(msg)
}


func main() {
	//输出20个字内的信息,用main 做信息头
	Logwrite("wewewee", "Main")
	//输出20个字以上的信息,用默认信息头
	Logwrite("wewewee11111111111111111111111111111111111112222222222222222222222222", "")
}

复制代码

效果: 控制台: 控制台效果 日志文件: 日志文件效果

文章分类
后端
文章标签