文档章节

优秀 Go 项目介绍: uniqush/log

喻恒春
 喻恒春
发布于 2013/08/05 20:28
字数 537
阅读 675
收藏 4

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

© 著作权归作者所有

共有 人打赏支持
喻恒春

喻恒春

粉丝 106
博文 31
码字总数 22644
作品 5
郑州
程序员
私信 提问
移动设备的统一的推送服务--Uniqush

Uniqush是一个自由和开放源码软件,它提供了一个移动设备的统一的推送服务。 通过服务器端运行 uniqush,你可以到任何受支持的移动平台接受推送通知。 手机推送, Golang, C2DM, APNS, Andro...

Uniqush
2012/09/06
6.7K
0
思想一碰就冒火: 开源贡献须耐心, 选择框架要谨慎

引子 最近笔者学习Go语言的过程中,使用了一些不错的package. 使用过程中根据自己的理解和需求,需要对package做写修改. 这很容易, fork 一个分支自己修改就好. 但是开源的力量所在不是搞独立不...

喻恒春
2013/08/18
0
1
开源Registry项目Harbor源代码结构解析

上周我们介绍了Harbor开源企业级容器Registry的架构,获得了社区很多朋友的反馈和建议,再次一并感谢,希望和大家一起,共同建设一个优秀的开源项目。本文请Harbor项目工程师尹文开介绍源码结...

project_harbor
2016/04/11
105
0
Mysql主从配置和跳过事务

Mysql主从配置和跳过事务 一、介绍: 大型网站中数据层还是原来那种传统的数据架构,或者只是淡淡靠一台服务器来扛,如此多的数据库连接操作,数据必然会崩溃,数据丢失的话,可想而知后果不...

legehappy
2017/11/13
0
0
SeasLog-1.0.2 发布,轻量\高效\便捷的PHP日志扩展

SeasLog-1.0.2发布. SeasLog是一个轻量,高效,便捷,规范的PHP日志扩展,精准的定位\精巧的设计,使它在PHP项目中逐步成为一个非常优秀的日志工具. Change log: 1. issue#11 添加buffer_size配置...

Neeke
2014/08/13
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

vue 对对象的属性进行修改时,不能渲染页面 vue.$set()

我在vue里的方法里给一个对象添加某个属性时,我console.log出来的是已经更改的object ,但是页面始终没有变化 原因如下: **受现代 JavaScript 的限制 (而且 Object.observe 也已经被废弃),...

Js_Mei
今天
2
0
开始看《Java学习笔记》

虽然书买了很久,但一直没看。这其中也写过一些Java程序,但都是基于IDE的帮助和对C#的理解来写的,感觉不踏实。 林信良的书写得蛮好的,能够帮助打好基础,看得出作者是比较用心的。 第1章概...

max佩恩
昨天
12
0
Redux 三大原则

1.单一数据源 在传统的MVC架构中,我们可以根据需要创建无数个Model,而Model之间可以互相监听、触发事件甚至循环或嵌套触发事件,这些在Redux中都是不被允许的。 因为在Redux的思想里,一个...

wenxingjun
昨天
8
0
跟我学Spring Cloud(Finchley版)-12-微服务容错三板斧

至此,我们已实现服务发现、负载均衡,同时,使用Feign也实现了良好的远程调用——我们的代码是可读、可维护的。理论上,我们现在已经能构建一个不错的分布式应用了,但微服务之间是通过网络...

周立_ITMuch
昨天
5
0
XML

学习目标  能够说出XML的作用  能够编写XML文档声明  能够编写符合语法的XML  能够通过DTD约束编写XML文档  能够通过Schema约束编写XML文档  能够通过Dom4j解析XML文档 第1章 xm...

stars永恒
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部