1 首先安装Seelog库

go get github.com/cihub/seelog

2 简单的日志输出

参考官方文档,些一个快速开始的 hello world 程序:

package main  import log "github.com/cihub/seelog"  func main() {  defer log.Flush()  log.Info("Hello world from Seelog!")
}  

3 输出到文件

3.1 使用 xml 配置文件

接下来我们些一个配置文件,使得 log 信息写入到本地文件。

<seelog type="asynctimer" asyncinterval="5000000" minlevel="trace" maxlevel="error">  <outputs formatid="common">  <buffered formatid="common" size="10000" flushperiod="1000">  <rollingfile type="date" filename="./log/test.log" datepattern="02.01.2006" fullname="true" maxrolls="30"/>  </buffered>  </outputs>  <formats>  <!--  <format id="common" format="%Date %Time %EscM(46)[%LEV]%EscM(49)%EscM(0) [%File:%Line] [%Func] %Msg%n" />  -->  <format id="common" format="%Date %Time [%LEV] [%File:%Line] [%Func] %Msg%n" />  </formats>
</seelog>  

按天拆分

<seelog type="asynctimer" asyncinterval="5000000" minlevel="trace" maxlevel="critical"><outputs formatid="main"><filter levels="trace,debug,info,warn,error,critical"><buffered size="10000" flushperiod="1000"><rollingfile type="date" filename="run.log" datepattern="20060102" maxrolls="30"/></buffered></filter></outputs><formats><format id="main" format="%Time|%LEV|%File|%Line|%Msg%n"/></formats>
</seelog>

其中:
outputs——里面是日志的配置,其中formatid中的id指定的是标签中的id,也就是按照format标签中格式来输出日志
buffered——指的是缓冲设置,size表示缓冲区大小,单位为byte。flushperiod表示刷新时间间隔,单位为ms

rollingfile——指定日志设置,type指定回滚方式,data表示按时期回滚,maxrolls表示最大重命名文件数。

按上述文件进行配置,则可以保存30天内的日志数据。个人还是比较喜欢这种配置方式的。当然对于更高级的配置,请参考官方文档。链接如下:
https://github.com/cihub/seelog/wiki/Receiver-reference

接下来我们修改下刚才的go代码。

package main  import (  log "github.com/cihub/seelog"  "fmt"
)  func main() {  defer log.Flush()  //加载配置文件  logger, err := log.LoggerFromConfigAsFile("config.xml")  if err!=nil{  fmt.Println("parse config.xml error")  }  //替换记录器  log.ReplaceLogger(logger)  for i:=0;i<1024;i++{  log.Info("Hello from Seelog!")  }
}

3.2 使用字节配置

import ("fmt"log "github.com/cihub/seelog"
)type LogCfg struct {Levels              string `json:"levels"` Fmt_id              string `json:"fmt_id"`Roll_type           string `json:"roll_type"`File_name           string `json:"file_name"`Roll_type_param     string `json:"roll_type_param"`Roll_type_max_rolls string `json:"roll_type_max_rolls"`
}type LocalLogInterface log.LoggerInterfacefunc RollingFile( cfg LogCfg ) ( LocalLogInterface, error ) {logConfig_Temp := `
<seelog type="sync" levels="%s" ><outputs formatid="%s"><rollingfile type="%s" filename="%s" %s="%s" maxrolls="%s" /></outputs><formats><format id="main" format="[%%Date %%Time] [%%LEV] %%Func(): %%Msg%%n"/><format id="sub1" format="[%%Date %%Time] [%%LEV]: %%Msg%%n"/><format id="sub2" format="[%%Date - %%Time] [%%LEV] %%Func(): %%Msg%%n"/></formats>
</seelog>`  cfg_roll_type_map := map[string] string { "date":"datepattern", "size":"maxsize" }roll_type_param_key, _ := cfg_roll_type_map[cfg.Roll_type]logConfig := fmt.Sprintf(  logConfig_Temp, cfg.Levels,cfg.Fmt_id,cfg.Roll_type, cfg.File_name, roll_type_param_key,cfg.Roll_type_param,cfg.Roll_type_max_rolls  )logger, err := log.LoggerFromConfigAsBytes( []byte( logConfig ) )if err != nil {fmt.Println( err )}loggerErr := log.ReplaceLogger( logger )if loggerErr != nil {fmt.Println( loggerErr )}return logger, err
}

本地日志通过对第三方包 “github.com/cihub/seelog” 做的二次封装,主要目的是为了清晰地定义一部分日志格式和统一配置文件为 json 格式,方便使用。

配置说明

"levels":               "info, trace, error, critical",
"fmt_id":               "main",
"roll_type":            "date",
"file_name":            "./log/manyrolls_date.log",
"roll_type_param":      "20180101",
"roll_type_max_rolls":  "4"
  1. levels 定义日志都输出哪些等级的日志,可在以下内容中选择任意数量的等级以逗号区分:trace,debug,info,warn,error,critical。

  2. fmt_id 日志格式 ID,目前代码中预定义的有 main,sub1,sub2.

    main: [2018-02-05 14:14:43] [INF] InitSqlPtr(): initSql init complete.

    sub1: [2018-02-05 14:14:43] [INF] InitSql init complete.

    sub2: [2018-02-05 - 14:14:43] [INF] InitSqlPtr(): initSql init complete.

  3. roll_type 回滚方式,选项 date 和 size,如果为 date 将会按照时间拆分日志,如果为 size 将会按照 size 拆分日志。

  4. file_name 日志输出文件路径。

  5. roll_type_param 日志输出拆分参数,当 roll_type 为 date 时,这个参数应该设置为 20180101,为时间限制; 当 roll_type 为 date 时,这个参数应设为 102400,为日志尺寸限制。

  6. roll_type_max_rolls 日志最大拆分次数,如果设置为 4 , 当第五次回滚拆分的时候,将会删除历史日志最早的那只文件。

使用举例

logger, err := log.RollingFile( LocalLogCfg )
if nil != err {panic( err )
}// 格式化输出
logger.Infof( "cfg -->> %#v", LocalLogCfg )// 输出内容
logger.Trace("Test messagedddd!")
logger.Debug("Debug Printed")
logger.Info("Info Printed")
logger.Warn("Warn Printed")
logger.Error("Error Printed")
logger.Critical("Critical Printed")

Golang seelog 使用入门简介相关推荐

  1. golang语言的入门基础,及window和linux系统上环境的搭配及运行

    golang语言的入门基础,及window和linux系统上环境的搭配及运行 简介: Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.Go语言专门针对多处理器 ...

  2. Java程序员Go语言入门简介

    引用:Java程序员Go语言入门简介 为什么是 Go 语言 类 C 的语法,这意味着 Java.C#.JavaScript 程序员能很快的上手 有自己的垃圾回收机制 跨平台.编译即可执行无需安装依赖环 ...

  3. Markdown入门简介

    参考 http://sspai.com/25137 作者: Te_Lee 文章来源: 少数派 Markdown入门简介(使用工具Haroopad) 一.使用的工具----haroopad(http:/ ...

  4. Golang 微框架 Gin 简介

    Golang 微框架 Gin 简介 框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框 ...

  5. 分布式文件系统—HDFS—入门简介

    原文作者:Zh_Y_G 原文地址:HDFS入门简介 目录 HDFS是什么? 设计目标: 安装配置 HDFS读写流程图解 CheckPoint HDFS是什么? 易于扩展的分布式文件系统 运行在大量普通 ...

  6. Logstash入门简介

    Logstash入门简介 介绍 Logstash是一个开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到最喜欢的存储库中(我们的存储库当然是ElasticSearch) ...

  7. android 教程概要,Android精通教程-第一节Android入门简介

    前言 大家好,我是 Vic,今天给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cea ...

  8. 车联网大数据框架_大数据基础:ORM框架入门简介

    作为大数据开发技术者,需要掌握扎实的Java基础,这是不争的事实,所以对于Java开发当中需要掌握的重要框架技术,也需要有相应程度的掌握,比如说ORM框架.今天的大数据基础分享,我们就来具体讲一讲OR ...

  9. 掌握 Ajax,第 1 部分: Ajax 入门简介

    2019独角兽企业重金招聘Python工程师标准>>> 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作原理,构建网站的一种有效方法 Ajax 由 HTM ...

最新文章

  1. html关于强制显示、隐藏浏览器的滚动条
  2. 第19次csp认证 202006-2 稀疏向量(C++)
  3. 基于matlab 的燃油喷雾图像处理方法,基于MATLAB的燃油喷雾图像处理方法.doc
  4. Linux系统中read的用法,Linux中read命令的用法
  5. Spring Cloud 异常处理
  6. 使用阿里云容器镜像的 github关联仓库,海外机器构建 Docker 镜像
  7. 微信小程序 云函数 Date时间不对+8小时 设置北京时间
  8. python调用通达信函数用户指标_通达信公式之间如何调用,如何引用通达信tdxwave指标...
  9. meshlab简单实践
  10. 笔记:Python Data Science Toolbox (Part 1)
  11. CSS特效——图片扫描
  12. VueX 以及axios
  13. linux下的触摸板关闭
  14. python熊猫图案_Python-熊猫
  15. IPS、VA、TN屏构造和优缺点对比
  16. 为什么那么多公司在用快速开发平台开发软件?下表说明了一切
  17. 免费HTTP代理商如何
  18. box-shadow四个边框设置阴影样式
  19. css如何适配iPhoneX
  20. 【项目】FT232RL设计记录

热门文章

  1. 反线性插值法进一步优化二分法解区间-M语言
  2. 激活函数(Relu,sigmoid,Tanh,softmax)详解
  3. 用PS制作动态雪景的教程
  4. 倩女幽魂次世代服务器为什么维护,8月22日停服维护公告--《倩女幽魂》手游2.0次世代全新起点...
  5. thinkphp6 框架源码分析
  6. c 语言单片机开发,单片机C语言开发离不开它
  7. 计算机组成原理——输入/输出系统の选择题整理
  8. CentOS8 防火墙设置
  9. FlashFXP.v3.5.4.1230-RES-patch by SunBeam
  10. 我用飞桨Parakeet合成小姐姐声音帮我“读”论文