文档章节

优秀 Go 项目介绍: uniqush/log

喻恒春
 喻恒春
发布于 2013/08/05 20:28
字数 537
阅读 667
收藏 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 是并发安全的,

© 著作权归作者所有

共有 人打赏支持
喻恒春

喻恒春

粉丝 107
博文 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
轻量\高效\便捷 PHP日志扩展发布 SeasLog-1.1.0

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

蝙蝠
2014/08/18
1K
9
开源Registry项目Harbor源代码结构解析

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

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

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

legehappy
2017/11/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

2135亿背后的双11项目协作怎么玩?

2018天猫双11已经收官,2135亿元的成交额再度刷新纪录,这是一场阿里巴巴经济体的深度协作。 在这个大协作项目中,项目协作难题难以想象:如何保证众多部门、百个核心产品、千个垂直项目、几...

阿里云云栖社区
16分钟前
1
0
Golang MD5 加密使用方法

用法一: str:="123456"data:=[]byte(str)h := md5.New()h.Write(data)output := h.Sum(nil)fmt.Println(fmt.Sprintf("%x",output)) 结果: e10adc3949ba59abbe56e057f20f883e 用......

lwkai
22分钟前
1
0
揭秘 | 双11逆天记录背后的数据库技术革新

每一个数字背后 都需要强大的技术支撑 Higher, Faster, Smarter 是我们不变的追求 技术无边界 创新无止境 原文链接

阿里云官方博客
26分钟前
1
0
深入解析React-redux插件入门

react-redux是使用redux开发react时使用的一个插件,另外插一句,redux不是react的产品,vue和angular中也可以使用redux;下面简单讲解,如何使用react-redux来开发react。 描述 这个插件可以...

前端攻城老湿
30分钟前
2
0
创建定长code

前言 有的时候我们需要基于现有的code进行改造,但是改造的一个前提可能是对于code长度有一定的要求,比如我们做分库分表,准备在code上做文章。 由于历史原因不同的渠道产生的code有几种不同...

春哥大魔王的博客
32分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部