文件日志和console日志也完成了,我们试试在其他其他使用一下。在我们之前的server中,main.go输入一下代码:

package mainimport "hm_log"var log hm_log.Logfunc initLog(logPath, logName string) {//log := hm_log.NewFileLog(logPath, logName)log := hm_log.NewConsoleLog()log.Debug("this is debug")
}func Run() {log.Warn("this is warn")
}func main() {initLog(".", "server")Run()
}复制代码

运行这个程序,可以看到终端成功的输入了日志,然后试试文件日志库。 但是这样有一个麻烦就是,每个相关都需要声明一个log,还是麻烦,所以我们需要进行提炼,将log 全局变量封装到我们的日志库中,只给一个初始函数,使用的时候直接log变量即可。进入我们的hm_log项目中,新建一个log.go

package hm_logimport "fmt"var log Logfunc InitLog(name string, config map[string]string) (err error) {switch name {case "file":log, err = NewFileLog(config)case "console":log, err = NewConsoleLog()default:err = fmt.Errorf("unspport log name:%s", name)}return
}func Debug(format string, args ...interface{}) {log.Debug(format, args...)
}func Trace(format string, args ...interface{}) {log.Trace(format, args...)
}func Info(format string, args ...interface{}) {log.Info(format, args...)
}func Warn(format string, args ...interface{}) {log.Warn(format, args...)
}func Error(format string, args ...interface{}) {log.Error(format, args...)
}func Fatal(format string, args ...interface{}) {log.Fatal(format, args...)
}func Close() {log.Close()
}
复制代码

由于文件日志需要配置多个参数,这是我们直接使用map来进行传参即可。因为传的是map,所以我们的文件日志库file.go也需要进行修改:

func NewFileLog(config map[string]string) (logFile Log, err error) {//判断是否传入了值,没有值就抛出错误logPath, ok := config["log_path"]if !ok {err = fmt.Errorf("not found log_path")return}logName, ok := config["log_name"]if !ok {err = fmt.Errorf("not found log_name")return}logFile = &FileLog{logPath:       logPath,logName:       logName,}//logFile.init()logFile.Init()return
}
复制代码

logFile.init()这里是会报错的,因为FileLog没有这个方法,所以文们需要加上一个init()方法。进入log_interface.go:

package hm_logtype Log interface {Debug(format string, args ...interface{}) // ...表示接收可变参数Trace(format string, args ...interface{})Info(format string, args ...interface{})Warn(format string, args ...interface{})Error(format string, args ...interface{})Fatal(format string, args ...interface{})Close() // 文件需要进行关闭操作Init()
}
复制代码

把我们之前的file.go,console.go给加上Init(): file.go

// 替换之前的init()
func (f *FileLog) Init() {
}
复制代码

console.go

func (f *FileLog) Init() { }
复制代码

我们再来修改之前的main.go:

package mainimport "hm_log"func initLog(logPath, logName string) {//log := hm_log.NewFileLog(logPath, logName)config := make(map[string]string, 8)config["log_path"] = "."config["log_name"] = "server"err := InitLog("file", config)if err != nil {return}
}func Run() {log.Warn("this is warn")
}func main() {initLog(".", "server")Run()
}
复制代码

这样我们就不需要声明全局变量log,使用起来就很方便了。运行一个,可以正常的使用。

go开发属于自己的日志库-日志库易用性封装相关推荐

  1. java开发有日志存表的吗_Java日志信息存库(logback篇)

    一.Logback简介 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-acce ...

  2. 你所不知道的日志异步落库

    https://www.cnblogs.com/scy251147/p/9193075.html 在互联网设计架构过程中,日志异步落库,俨然已经是高并发环节中不可缺少的一环.为什么说是高并发环节中不可 ...

  3. openresty开发系列36--openresty执行流程之6日志模块处理阶段

    openresty开发系列36--openresty执行流程之6日志模块处理阶段 一)header_filter_by_lua 语法:header_filter_by_lua <lua-scri ...

  4. 你完全没了解过的日志异步落库

    前言 在互联网设计架构过程中,日志异步落库,俨然已经是高并发环节中不可缺少的一环.为什么说是高并发环节中不可缺少的呢? 原因在于,如果直接用mq进行日志落库的时候,低并发下,生产端生产数据,然后由消费 ...

  5. 频发:记ADG备库日志应用延迟的一次故障处理-云和恩墨技术通讯精选

    各位亲爱的用户/读者朋友们: 为了及时共享行业案例,通告共性问题,达成知识共享和提前预防,我们整理和编辑了<云和恩墨技术通讯>(7月刊),通过对过去一段时间的知识回顾和故障归纳,以期提供有 ...

  6. Go日志-Uber开源库zap使用

    目录 1. zap包介绍 2. zap的使用 3. 使用Namespace构建嵌套格式 4. 构造的Logger对象的选项Option 5. 参考资料 上一篇我们讲到go日志官方标准库的log的使用方 ...

  7. 【游戏开发进阶】新发带你玩转Unity日志打印技巧(彩色日志 | 日志存储与上传 | 日志开关 | 日志双击溯源)

    文章目录 一.前言 二.常规日志打印 1.打印Hello World 2.打印任意类型的数据 3.context参数干嘛的 4.格式化输出 三.彩色日志打印 四.日志存储与上传 1.打印日志事件 2. ...

  8. iOS开发76-使用Xcode查看实时日志

    iOS开发76-使用Xcode查看实时日志 在Xcode上运行App代码的时候,可以实时查看到日志. 在没有APP源代码的情况下,直接使用Xcode查看Debug版本的App来查看实时日志. 步骤如下 ...

  9. oracle dg库慢,dg库日志应用慢参数调整

    dg库日志应用慢参数调整 1> 日志应用是否使用了并行;-并行度看主机的cpu个数 alter database recover managed standby database paralle ...

  10. 基于 abp vNext 和 .NET Core 开发博客项目 - 异常处理和日志记录

    基于 abp vNext 和 .NET Core 开发博客项目 - 异常处理和日志记录 转载于:https://github.com/Meowv/Blog 在开始之前,我们实现一个之前的遗留问题,这个 ...

最新文章

  1. php 静态类内存,php面向对象中static静态属性与方法的内存位置分析
  2. Linux rpm 命令参数
  3. 关于 移动端 页面跳转的方赞
  4. 简单文件的上传与保存
  5. 【Java】Java枚举类型示例
  6. 爬虫软件python功能_Python 网络爬虫程序详解
  7. java集群插件_别说,Cerebro还真好用!老板再也不用担心ES集群了
  8. 推荐!可视化垃圾回收算法(转)
  9. Windows Azure AppFabric 入门教学(七):多播(Multicast)
  10. 面经 | NLP算法岗(百度)
  11. 数学分析学习(一):映射与不等式
  12. Spring MVC - 拦截器实现 和 用户登陆例子
  13. 直方图均衡化 java,OpenCV Java 直方图均衡化
  14. python读取nc文件并转换成csv_在Python3中读取crystal report.rpt文件并将其转换为.csv或.xlsx...
  15. 基于Pacemaker+Corosync的PostgreSQL HA故障两例
  16. 微信小程序发现的一些小问题以及解决方案集合以及注意点
  17. 宏观调控绝不是微观控制
  18. 移动硬盘安装ubuntu16.04
  19. 华硕ddns注册ip地址不正确_华硕路由器 ddns注册成功,但是连接不上,怎么修改成别的ddns...
  20. <<算法很美>>——(三)十大排序算法(下)

热门文章

  1. 四种方法求Capacitated Facility Location Problem问题
  2. 修改model,映射到表中
  3. Java中上转型对象数组
  4. Yii2如何用migrate快速建表
  5. eclipse安装activiti 工作流插件
  6. Blob(二进制)、byte[]、long、date之间的类型转换
  7. [转] 虚拟机VMware3种网络模式(桥接、nat、Host-only)的工作原理
  8. 七、集合框架,Collection、list、set、map老师说集合学好了走到哪里都不怕
  9. ASP.NET2.0缓存(Cache)技术
  10. Hystrix熔断机制原理剖析