首页 > 其他分享 >go各框架的log日志

go各框架的log日志

时间:2023-03-23 18:35:51浏览次数:36  
标签:Info log logx json go 日志 string

1.kratos
Log:

type Logger interface {
    Log(level Level, keyvals ...interface{}) error
}
type logger struct {
    logger    Logger
    prefix    []interface{}
    hasValuer bool
    ctx       context.Context
}

kratos抽象了Logger接口,通过调Logger的Log方法来打印日志


l := log.DefaultLogger
_ = l.Log(log.LevelInfo, "test1:", 1)  // INFO test1:=1 
//所以可以调用不同的日志库,只要实现了Log接口。
type Helper struct {
    logger Logger
    msgKey string
}
h := log.NewHelper(l)
h.Info("test2:", 2)  // INFO msg=test2:2

可以通过NewHelper()方法来传入Logger
Helper用来帮助简写代码,省略了一些日志等级,用Info,Debug等方法输出日志。

with:

l := log.DefaultLogger
logger := log.With(l, "time:", log.DefaultTimestamp)

h := log.NewHelper(logger)
h.Info("test2:", 2)  // INFO time:=2023-03-23T16:26:25+08:00 msg=test2:2

kratos日志 还有日志过滤,绑定context,全局日志等。
使用:
kratos框架建议是注入到各层初始化方法,然后通过结构体调用。

2.kitex 日志

type FullLogger interface {
    Logger
    FormatLogger
    CtxLogger
    Control
}

FullLogger定义了kitex日志要实现的方法,包括了Infof,Debugf,Debug,Info,CtxDebugf,CtxInfof等等方法。
kitex在 pkg/klog 里定义了一个全局defaultLogger ,可以通过SetLogger 传入实现了FullLogger接口的结果换掉默认的logger

打印日志

import (
    "github.com/cloudwego/kitex/pkg/klog"
    kitexlogrus "github.com/kitex-contrib/obs-opentelemetry/logging/logrus"
)
func main() {
    klog.Info("test1:", 1)
    klog.SetLogger(kitexlogrus.NewLogger())
    klog.SetLevel(klog.LevelDebug)
    klog.Info("test2:", 2)
}
//2023/03/23 17:34:08.368679 mytest.go:9: [Info] test1:1
//{"level":"info","msg":"test2:2","time":"2023-03-23T17:34:08+08:00"}


3.go-zero 日志
go-zero在logx包下定义了日志的一些配置

type LogConf struct {
    ServiceName string `json:",optional"`
    Mode string `json:",default=console,options=[console,file,volume]"`
    Encoding string `json:",default=json,options=[json,plain]"`
    TimeFormat string `json:",optional"`
    Path string `json:",default=logs"`
    Level string `json:",default=info,options=[info,error,severe]"`
    Compress bool `json:",optional"`
    KeepDays int `json:",optional"`
    StackCooldownMillis int `json:",default=100"`
}

其中包括了ServiceName,Encoding,Path等

定义了日志的打印方法

type Logger interface {
    Debug(...any)
    Debugf(string, ...any)
    …..
    Errorw(string, ...LogField)
    WithFields(fields ...LogField) Logger
}


logx定义了两个接口,方便自定义 logx,将日志写入任何存储。
* logx.NewWriter(w io.Writer)
* logx.SetWriter(write logx.Writer)

import (
    "github.com/zeromicro/go-zero/core/logx"
    "github.com/zeromicro/zero-contrib/logx/zapx"
)

func main() {
    logx.Error("test1:", 1)
    logx.Info("test2:", 2)

    writer, _ := zapx.NewZapWriter()
    logx.SetWriter(writer)
    logx.Info("test3:", 3)
}

//{"@timestamp":"2023-03-23T18:05:26.332+08:00","caller":"test/mytest.go:9","content":"test1:1","level":"error"}
//{"@timestamp":"2023-03-23T18:05:26.332+08:00","caller":"test/mytest.go:10","content":"test2:2","level":"info"}
//{"level":"info","ts":1679565926.332802,"caller":"test/mytest.go:14","msg":"test3:3","caller":"test/mytest.go:14"}

 

标签:Info,log,logx,json,go,日志,string
From: https://www.cnblogs.com/gz-wod/p/17248450.html

相关文章

  • mongodb某个字段distinct计数问题
    方式1List<AggregationOperation>operations=newArrayList<>();operations.add(Aggregation.match(Criteria.where("created_at").gte(begin).lte(end)));operatio......
  • 如何使用Rust迭代器, 以Luhn Algorithm的实现为例
    本题来源自谷歌的Comprehensive-Rust课程第二天下午的练习问题描述在这个练习的描述中,LuhnAlgorithm是一种用来验证银行卡号是否合法的算法.他的具体流程如下:去掉......
  • 如何使用RunnerGo做自动化测试
    RunnerGo支持自动化测试功能,RunnerGo的工作流程是:接口管理-场景管理-性能测试-自动化测试,所以自动化测试的运行内容为场景下的用例,我们可以在“场景管理”中预先配置好该......
  • java 原生项目 使用 log4j 写日志 及 log4j.properties 配置说明
    今天遇到一个java原生项目要使用log4j写日志(非maven),写下来供大家参考下载log4j包Apachelog4j1.2-DownloadApachelog4j1.2 把这个文件放到 项目的......
  • homework to blog
    某培训机构入学管理系统有报名、交费和就读等多项功能,下面是对其各项功能的说明:1、报名:由报名处负责,需要在学员登记表上进行报名登记,需要查询课程表让学员选报课程,学院所......
  • 初识C语言(13)goto语句
    设置程序关机:Knowledge:1:goto语句可以跳出多重嵌套循环 error是标签2:cmd------command命令行 ......
  • logging模块
    #coding=utf-8importloggingfromloggingimporthandlersimporttimedefmylogger():#创建一个记录器,命名为testlogger=logging.getLogger('test')......
  • gor实现线上HTTP流量复制压测引流
    一、使用背景gor是一款go语言实现的简单的http流量复制工具,它的主要目的是使你的生产环境HTTP真实流量在测试环境和预发布环境重现。只需要在代理例如nginx入口服务器上......
  • Blog如何能实现直接粘贴把图片上传到服务器中
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umeditor.js,......
  • from selenium.webdriver import DesiredCapabilities:DesiredCapabilities.CHROME["l
    https://blog.csdn.net/JZF2050/article/details/127965179 DesiredCapabilities.CHROME["loggingPrefs"]={'browser':'ALL'} fromselenium.webdriverimportDe......