文档章节

优秀 Go 项目介绍: uniqush/log

喻恒春
 喻恒春
发布于 2013/08/05 20:28
字数 537
阅读 645
收藏 4
点赞 2
评论 0

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

© 著作权归作者所有

共有 人打赏支持
喻恒春

喻恒春

粉丝 104
博文 29
码字总数 21951
作品 5
郑州
程序员
移动设备的统一的推送服务--Uniqush

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

Uniqush ⋅ 2012/09/06 ⋅ 0

思想一碰就冒火: 开源贡献须耐心, 选择框架要谨慎

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

喻恒春 ⋅ 2013/08/18 ⋅ 1

开源Registry项目Harbor源代码结构解析

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

project_harbor ⋅ 2016/04/11 ⋅ 0

Mysql主从配置和跳过事务

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

legehappy ⋅ 2017/11/13 ⋅ 0

SeasLog-1.0.2 发布,轻量\高效\便捷的PHP日志扩展

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

蝙蝠 ⋅ 2014/08/13 ⋅ 6

SeasLog-1.1.4 发布,PHP 日志扩展发布

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

蝙蝠 ⋅ 2014/08/21 ⋅ 4

代码搜索引擎--i.So.Code

北京大学Asseters小组开发的新一代代码搜索引擎。 目前iSoCode可以检索大约200个优秀(是真的优秀的~)的开源项目,包括jdk、Lucene、log4j、jdom、commons- lang、commons-cli等一大批大家经...

匿名 ⋅ 2011/03/22 ⋅ 0

轻量\高效\便捷 PHP日志扩展发布 SeasLog-1.1.0

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

蝙蝠 ⋅ 2014/08/18 ⋅ 9

gf v0.97beta 发布,更多模块支持、功能改进及文档完善

本次更新从v0.95beta 到 v0.97beta,更新内容如下: 增加gfsnotify文件监控模块; 配置管理模块增加配置文件自动检测更新机制; 模板引擎增加对模板文件的自动检测更新机制; 改进gconv包基本...

johng-cn ⋅ 04/23 ⋅ 0

GentleNet使用之详细图解[语法使用增强版]

目录 第一章 开发环境 第二章 简介 第三章 Gentle.Net-1.5.0 下载文件包介绍 第四章 使用步骤 第五章 源码下载 第一章、开发环境: Vs 2010 + Sql 2005 + GentleNet 1.5.0 【Web网站程序...

黄欣怡 ⋅ 2017/06/13 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

浅谈springboot Web模式下的线程安全问题

我们在@RestController下,一般都是@AutoWired一些Service,由于这些Service都是单例,所以并不存在线程安全问题。 由于Controller本身是单例模式 (非线程安全的), 这意味着每个request过来,...

算法之名 ⋅ 今天 ⋅ 0

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部