优秀 Go 项目介绍: uniqush/log
优秀 Go 项目介绍: uniqush/log
喻恒春 发表于4年前
优秀 Go 项目介绍: uniqush/log
  • 发表于 4年前
  • 阅读 630
  • 收藏 4
  • 点赞 2
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: MultiLogger,一个应用多个 Logger 的妙处.

uniqush/log

uniqush/loguniqush 项目中的 log 包. uniqush 是一个 移动设备的统一的推送服务

一般来说实现一个 log 包并不复杂, 对官方提供的 log 包进行少许包装即可完成. 本文之所以认为她优秀.是因为 uniqush/log 提供了 MultiLogger. 这正式其他 go log 包所不具备的.

优异之处: MultiLogger

看下定义

<!-- lang: cpp -->
type multiLogger struct {
    loggers []Logger
}

Logger 不言而喻就是一个 log 接口, 这不必费笔墨讲解. MultiLogger 是一个 Logger 切片. 一般的一个应用一个 log 这是很常规的用法. MultiLogger 有什么必要么? 还记得很多httpd服务都有访问日志和错误日志么?这是分开的两个文件.

是了 MultiLogger 可以把不同级别的日志分别输出到不同的 io.Writer. 比如根据级别分文件保存. 还有更妙的用法.

io.Writer 的妙处

uniqush/log 使用的输出是 io.Writer 接口. 不是 *os.File 之类的具体 struct 实例. 这就可以产生很多变化.

假设你的应用要求, 如果超过某个日志级别需要立刻通知到维护人员, 比如发 email 或者短信. 那就可以先实现一个 io.Writer 接口, 然后和日志级别一起作为

<!-- lang: cpp -->
func NewLogger(writer io.Writer, prefix string, logLevel int) Logger

作为NewLogger的参数. 得到一个 logMail, 当然普通的写文件日志的 logFile 也可以有一个. 这几个可以生成一个

<!-- lang: cpp -->
log:=MultiLogger(logMail, logFile)

好了, 用变量 log 记录日志吧, 不同的日志级别,文件也写了,及时的 email 通知也有了.

注意并发安全

整个实现中压根就没有用到锁, 并发如何办. 并发可以在 NewLogger 的参数writer中实现. 也就是说这个设计把并发控制抛给使用者了.粗看好像不严谨,其实呢,在 writer 中加个锁啥的,很简单.

ps: 感觉作者应该考虑并发安全问题, 毕竟 go 官方的 log 是并发安全的,

标签: go uniqush log 日志 email
共有 人打赏支持
喻恒春
粉丝 103
博文 26
码字总数 18572
作品 5
×
喻恒春
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: