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

steve_ji · · 8270 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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

  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)

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:steve_ji

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

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8270 次点击  
加入收藏 微博
1 回复  |  直到 2019-07-25 14:03:16
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传