文档章节

优秀 Go 项目介绍: uniqush/log

喻恒春
 喻恒春
发布于 2013/08/05 20:28
字数 537
阅读 662
收藏 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
博文 29
码字总数 21951
作品 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
SeasLog-1.1.4 发布,PHP 日志扩展发布

SeasLog-1.1.4发布. SeasLog是一个轻量,高效,便捷,规范的PHP日志扩展,精准的定位精巧的设计,使它在PHP项目中逐步成为一个非常优秀的日志工具. Change log: - Define some function at heade...

蝙蝠
2014/08/21
864
4
SeasLog-1.0.2 发布,轻量\高效\便捷的PHP日志扩展

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

蝙蝠
2014/08/13
1K
6

没有更多内容

加载失败,请刷新页面

加载更多

身处小公司,如何在2年内快速突破,拿到大厂offer?|掘金技术征文

本文是我一个朋友的经历,谨以此文告诉那些向往更好的未来发展而一直努力奋斗的朋友们。不管你现在身处什么小公司,都不要气馁,机会还是有的,只要你敢于拼搏奋斗,我相信你一定可以成功的。...

SuShine
12分钟前
0
0
web应用防火墙的作用

web应用防火墙也被称为网站应用级入侵防御系统,按照一些常规的定义,WAF是指通过一些列针对HTTP/HTTPS的安全策略专门为web应用提供保护的产品。它主要用于防御针对网络应用层的攻击,像SQL...

上树的熊
14分钟前
1
0
5分钟掌握var,let和const异同

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 原文出处:https://dzone.com/articles/javascript-difference-between-var-let-and-const-...

葡萄城技术团队
16分钟前
1
0
gif工具ffmpeg 的安装

ffmpeg 是一个可以将视频生成gif 格式的图片的工具, 下面说说如何安装这个工具吧: 1、 2 3 4 5 配置环境变量:

wangyanbao
18分钟前
0
0
RocketMq在windows下安装

mqnamesrv.cmd -n localhost:9876#启动namesrvmqbroker.cmd #启动brokermqbroker.cmd -n localhost:9876 autoCreateTopicEnable=true//启动控制台java -jar rocketmq-console-ng......

王桥修道院副院长
18分钟前
0
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部