热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golangzap包使用

zap是Uber开源的高性能log包。1packagemain23import(4encodingjson5fmt67github.comnatefinchlumberj

zap是Uber开源的高性能log包。

1 package main
2
3 import (
4 "encoding/json"
5 "fmt"
6
7 "github.com/natefinch/lumberjack"
8 "go.uber.org/zap"
9 "go.uber.org/zap/zapcore"
10 )
11
12 // logpath 日志文件路径
13 // loglevel 日志级别
14 func initLogger(logpath string, loglevel string) *zap.Logger {
15
16 hook := lumberjack.Logger{
17 Filename: logpath, // 日志文件路径
18 MaxSize: 128, // megabytes
19 MaxBackups: 30, // 最多保留300个备份
20 MaxAge: 7, // days
21 Compress: true, // 是否压缩 disabled by default
22 }
23
24 w := zapcore.AddSync(&hook)
25
26 // 设置日志级别,debug可以打印出info,debug,warn;info级别可以打印warn,info;warn只能打印warn
27 // debug->info->warn->error
28 var level zapcore.Level
29 switch loglevel {
30 case "debug":
31 level = zap.DebugLevel
32 case "info":
33 level = zap.InfoLevel
34 case "error":
35 level = zap.ErrorLevel
36 default:
37 level = zap.InfoLevel
38 }
39 encoderConfig := zap.NewProductionEncoderConfig()
40 // 时间格式
41 encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
42 core := zapcore.NewCore(
43 zapcore.NewConsoleEncoder(encoderConfig),
44 w,
45 level,
46 )
47
48 logger := zap.New(core)
49 logger.Info("DefaultLogger init success")
50
51 return logger
52 }
53
54 type Test struct {
55 Name string `json:"name"`
56 Age int `json:"age"`
57 }
58
59 func main() {
60 t := &Test{
61 Name: "xiaoming",
62 Age: 12,
63 }
64 data, err := json.Marshal(t)
65 if err != nil {
66 fmt.Println("marshal is failed,err: ", err)
67 }
68
69 // 历史记录日志名字为:all-2018-11-15T07-45-51.763.log,服务重新启动,日志会追加,不会删除
70 logger := initLogger("./all.log", "debug")
71 for i := 0; i <6; i++ {
72 logger.Info(fmt.Sprint("test log ", i), zap.Int("line", 47))
73 logger.Debug(fmt.Sprint("debug log ", i), zap.ByteString("level", data))
74 logger.Info(fmt.Sprint("Info log ", i), zap.String("level", `{"a":"4","b":"5"}`))
75 logger.Warn(fmt.Sprint("Info log ", i), zap.String("level", `{"a":"7","b":"8"}`))
76 }
77
78 }

all.log内容

2018-11-15T16:19:30.269+0800 info DefaultLogger init success
2018-11-15T16:19:30.289+0800 info test log 0 {"line": 47}
2018-11-15T16:19:30.289+0800 info Info log 0 {"level": "{\"a\":\"4\",\"b\":\"5\"}"}
2018-11-15T16:19:30.289+0800 warn Info log 0 {"level": "{\"a\":\"7\",\"b\":\"8\"}"}
2018-11-15T16:19:30.289+0800 info test log 1 {"line": 47}
2018-11-15T16:19:30.289+0800 info Info log 1 {"level": "{\"a\":\"4\",\"b\":\"5\"}"}
2018-11-15T16:19:30.289+0800 warn Info log 1 {"level": "{\"a\":\"7\",\"b\":\"8\"}"}
2018-11-15T16:19:30.289+0800 info test log 2 {"line": 47}
2018-11-15T16:19:30.289+0800 info Info log 2 {"level": "{\"a\":\"4\",\"b\":\"5\"}"}
2018-11-15T16:19:30.289+0800 warn Info log 2 {"level": "{\"a\":\"7\",\"b\":\"8\"}"}
2018-11-15T16:19:30.289+0800 info test log 3 {"line": 47}
2018-11-15T16:19:30.289+0800 info Info log 3 {"level": "{\"a\":\"4\",\"b\":\"5\"}"}
2018-11-15T16:19:30.289+0800 warn Info log 3 {"level": "{\"a\":\"7\",\"b\":\"8\"}"}
2018-11-15T16:19:30.289+0800 info test log 4 {"line": 47}
2018-11-15T16:19:30.289+0800 info Info log 4 {"level": "{\"a\":\"4\",\"b\":\"5\"}"}
2018-11-15T16:19:30.289+0800 warn Info log 4 {"level": "{\"a\":\"7\",\"b\":\"8\"}"}
2018-11-15T16:19:30.289+0800 info test log 5 {"line": 47}
2018-11-15T16:19:30.289+0800 info Info log 5 {"level": "{\"a\":\"4\",\"b\":\"5\"}"}
2018-11-15T16:19:30.289+0800 warn Info log 5 {"level": "{\"a\":\"7\",\"b\":\"8\"}"}

 



推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • ps:写的第一个,不足之处,欢迎拍砖---只是想用自己的方法一步步去实现一些框架看似高大上的小功能(比如说模型中的toArraytoJsonsetAtt ... [详细]
  • IamsettingupApacheserverwithTortoiseSVNforalocalsourcecoderepository.Ihaveobservedt ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 最近流行的一些木马群的查杀方法
    (发在卡卡的一个帖子转到这里来,方便大 ... [详细]
author-avatar
暴躁的玩具
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有