log包写文件的时候有没有必要开启协程去处理?

kaxikaxi · 2018-03-24 11:18:46 · 1621 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2018-03-24 11:18:46 的主题,其中的信息可能已经有所发展或是发生改变。

在服务中往往磁盘I/O会成为性能瓶颈,我想知道在golang项目中利用log包记录日志的时候有没有必要通过协程实现?还是说同步执行就好,几乎在所有项目中都是同步写的


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

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

1621 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2018-03-24 13:37:09
JJJJJJJerk
JJJJJJJerk · #1 · 7年之前

改协程比较好

package dogger

import (
    "log"
    "net/http"
    "bytes"
)

type Ding struct {
    WebHookUrl string
}

func (d *Ding) Write(p []byte) (n int, err error) {
    //remove last \n byte
    p = p[:len(p)-2]
    buf := bytes.NewBufferString(`{"msgtype":"text","text":{"content":"`)
    buf.Write(p)
    buf.WriteString(`"}}`)
    //发功日志到钉钉群机器人
    go http.Post(d.WebHookUrl, "application/json", buf)
    return 0, err
}

var logger *log.Logger

func NewLogger(hookUrl string) *log.Logger {
    dingDingTalker := Ding{hookUrl}
    logger = log.New(&dingDingTalker, "eric:", log.Lshortfile | log.LstdFlags)
    return logger
}

func Println(v ...interface{}) {
    if logger == nil {
        log.Fatal("请设置钉钉bot Web Hook Url")
    }
    logger.Println(v)
}
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传