golang log日志,错误信息写入文件,创建目录,追加写入

这篇博客介绍了如何在Golang中将错误日志写入文件,包括检查并创建日志目录,判断日志文件是否存在,设置文件权限以及进行追加写入操作。调用方式为直接使用包名.WriteLog(""1.log"

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目的: 错误日志写入到文件里面

  1. 日志文件夹是否存在,创建日志目录
  2. 日志文件是否存在,创建日志文件
  3. 文件权限
  4. 追加写入
package main

import (
	"io"
	"os"
	"time"
)

const (
	//LOGPATH  LOGPATH/time.Now().Format(FORMAT)/*.log
	LOGPATH = "log/"
	//FORMAT .
	FORMAT = "20060102"
	//LineFeed 换行
	LineFeed = "\r\n"
)

//以天为基准,存日志
var path = LOGPATH + time.Now().Format(FORMAT) + "/"

//WriteLog return error
func WriteLog(fileName, msg string) error {
	if !IsExist(path) {
		return CreateDir(path)
	}
	var (
		err error
		f   *os.File
	)
	
	f, err = os.OpenFile(path+fileName, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
	_, err = io.WriteString(f, LineFeed+msg)

	defer f.Close()
	return err
}

//CreateDir  文件夹创建
func CreateDir(path string) error {
	err := os.MkdirAll(path, os.ModePerm)
	if err != nil {
		return err
	}
	os.Chmod(path, os.ModePerm)
	return nil
}

//IsExist  判断文件夹/文件是否存在  存在返回 true
func IsExist(f string) bool {
	_, err := os.Stat(f)
	return err == nil || os.IsExist(err)
}
调用 直接 包名.WriteLog(“1.log”,“这是个错误”)

本文使用到的技术 剖析:

1: os.Stat(name string) (fi FileInfo, err error)       
//返回描述文件的FileInfo信息。如果出错,将是 *PathError类型。

2: os.IsExist(err error) bool 
//返回一个布尔值,它指明err错误是否报告了一个文件或者目录已经存在。它被ErrExist和其它系统调用满足

3: os.MkdirAll(path string, perm FileMode) error
//创建一个新目录,该目录是利用路径(包括绝对路径和相对路径)
  进行创建的,如果需要创建对应的父目录也一起进行创建
  如果已经有了该目录,则不进行新的创建
  当创建一个已经存在的目录时,不会报错.

4: os.Chmod(name string, mode FileMode) error
//更改文件的权限(读写执行,分为三类:all-group-owner)

5: os.OpenFile(name string, flag int, perm FileMode) (file *File, err error)
//指定文件权限和打开方式打开name文件或者create文件,其中flag标志如下:
O_RDONLY:只读模式(read-only)
O_WRONLY:只写模式(write-only)
O_RDWR:读写模式(read-write)
O_APPEND:追加模式(append)
O_CREATE:文件不存在就创建(create a new file if none exists.)
O_EXCL:与 O_CREATE 一起用,构成一个新建文件的功能,它要求文件必须不存在(used with O_CREATE, file must not exist)
O_SYNC:同步方式打开,即不使用缓存,直接写入硬盘
O_TRUNC:打开并清空文件
至于操作权限perm,除非创建文件时才需要指定,不需要创建新文件时可以将其设定为0.虽然go语言给perm权限设定了很多的常量,但是习惯上也可以直接使用数字,如0666(具体含义和Unix系统的一致).

6: io.WriteString(w Writer, s string) (n int, err error)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值