Go语言实现日志系统

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

package main import (    "errors"    "fmt"    "os" ) func main() {    // 准备日志器    l := createLogger()    // 写一个日志    l.Log("hello") } // 创建日志器 func createLogger() *Logger {    // 创建日志器    l := NewLogger()    // 创建命令行写入器    cw := newConsoleWriter()    // 注册命令行写入器到日志器中    l.RegisterWriter(cw)    // 创建文件写入器    fw := newFileWriter()    // 设置文件名    if err := fw.SetFile("log.log"); err != nil {       fmt.Println(err)    }    // 注册文件写入器到日志器中    l.RegisterWriter(fw)    return l } // 声明日志写入器接口 type LogWriter interface {    Write(data interface{}) error } // 日志器 type Logger struct {    // 这个日志器用到的日志写入器    writerList []LogWriter } // 注册一个日志写入器 func (l *Logger) RegisterWriter(writer LogWriter) {    l.writerList = append(l.writerList, writer) } // 将一个data类型的数据写入日志 func (l *Logger) Log(data interface{}) {    // 遍历所有注册的写入器    for _, writer := range l.writerList {       // 将日志输出到每一个写入器中       writer.Write(data)    } } // 创建日志器的实例 func NewLogger() *Logger {    return &Logger{} } // 命令行写入器 type consoleWriter struct { } // 实现LogWriter的Write()方法 func (f *consoleWriter) Write(data interface{}) error {    // 将数据序列化为字符串    str := fmt.Sprintf("%v\n", data)    // 将数据以字节数组写入命令行中    _, err := os.Stdout.Write([]byte(str))    return err } // 创建命令行写入器实例 func newConsoleWriter() *consoleWriter {    return &consoleWriter{} } // 声明文件写入器 type fileWriter struct {    file *os.File } // 设置文件写入器写入的文件名 func (f *fileWriter) SetFile(filename string) (err error) {    // 如果文件已经打开, 关闭前一个文件    if f.file != nil {       f.file.Close()    }    // 创建一个文件并保存文件句柄    f.file, err = os.Create(filename)    // 如果创建的过程出现错误, 则返回错误    return err } // 实现LogWriter的Write()方法 func (f *fileWriter) Write(data interface{}) error {    // 日志文件可能没有创建成功    if f.file == nil {       // 日志文件没有准备好       return errors.New("file not created")    }    // 将数据序列化为字符串    str := fmt.Sprintf("%v\n", data)    // 将数据以字节数组写入文件中    _, err := f.file.Write([]byte(str))    return err } // 创建文件写入器实例 func newFileWriter() *fileWriter {    return &fileWriter{} }



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

本文来自:51CTO博客

感谢作者:huang_he_87

查看原文:Go语言实现日志系统

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

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