优秀 Go 项目介绍: uniqush/log

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 是并发安全的,

转载于:https://my.oschina.net/achun/blog/150312

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值