Go实现整合Logrus实现日志打印

目录
  • 1 初步使用
  • 2 增加标签WithFields
  • 3 配置常见参数
  • 4 输出日志到文件
  • 5 利用Hooks将日志输出到其他地方

Github:github.com/sirupsen/lo…

1 初步使用

package main
import (
   "context"
   "github.com/sirupsen/logrus"
)
​
func main() {
   method0()
}
func method0() {
   logger:= logrus.New()
   logger.Warning("This is a first log.")
   ctx := context.WithValue(context.Background(),"key","value")
   logger.Warning(ctx,"This is a second log.")
}

2 增加标签WithFields

package main​
import (
   "context"
   "github.com/sirupsen/logrus"
)
func main() {
   method1()
}
func method1() {
   log.WithFields(log.Fields{
      "fieldKey": "fieldValue",
   }).Warning("This is a first field log.")
​
   log.WithFields(log.Fields{
      "fieldKey": "fieldValue",
      "fieldKey2": "fieldValue2",
   }).Warning("This is a second field log.")
}

3 配置常见参数

package main
import (
   "context"
   "github.com/sirupsen/logrus"
   log "github.com/sirupsen/logrus"
   "os"
)
​func main() {
   method2()
}
func init() {
   // 日志作为JSON而不是默认的ASCII格式器.
   log.SetFormatter(&log.JSONFormatter{})
​
   // 输出到标准输出,可以是任何io.Writer
   log.SetOutput(os.Stdout)
​
   // 只记录xx级别或以上的日志
   log.SetLevel(log.TraceLevel)
}
func method2() {
   log.WithFields(log.Fields{
      "animal": "walrus",
      "size":   10,
   }).Info("A group of walrus emerges from the ocean")
​
   log.WithFields(log.Fields{
      "omg":    true,
      "number": 122,
   }).Warn("The group's number increased tremendously!")
​
   log.WithFields(log.Fields{
      "omg":    true,
      "number": 100,
   }).Fatal("The ice breaks!")
}

Formatter一般分为两种:

  • &log.JSONFormatter{}
  • &log.TextFormatter{}

日志级别一共七种:

  • log.Trace()
  • log.Debug()
  • log.Info()
  • log.Warn()
  • log.Error()
  • log.Fatal()
  • log.Panic()

4 输出日志到文件

package main
import (
    "context"
    "github.com/sirupsen/logrus"
    "os"
)
func main() {
    method4()
}
func method4() {
   var log = logrus.New()
   file ,err := os.OpenFile("logrus.log", os.O_CREATE|os.O_WRONLY, 0666)
   if err == nil{
      log.Out = file
   }else{
      log.Info("Failed to log to file")
   }
​
   log.WithFields(logrus.Fields{
      "filename": "123.txt",
   }).Info("This is a file log")
}

logrus.log文件的内容:

time="2022-01-06T13:04:25+08:00" level=info msg="This is a file log" filename=123.txt\

5 利用Hooks将日志输出到其他地方

import (
  log "github.com/sirupsen/logrus"
  "gopkg.in/gemnasium/logrus-airbrake-hook.v2" // the package is named "airbrake"
  logrus_syslog "github.com/sirupsen/logrus/hooks/syslog"
  "log/syslog"
)
func init() {
  // 使用气闸挂钩来报告错误严重程度或以上的错误一个异常追踪。您可以创建自定义钩子,请参见钩子部分。
  log.AddHook(airbrake.NewHook(123, "xyz", "production"))
​
  hook, err := logrus_syslog.NewSyslogHook("udp", "localhost:514", syslog.LOG_INFO, "")
  if err != nil {
    log.Error("Unable to connect to local syslog daemon")
  } else {
    log.AddHook(hook)
  }
}

只需要在AddHook是添加相应的Hook就可以了

到此这篇关于Go实现整合Logrus实现日志打印的文章就介绍到这了,更多相关Go Logrus日志打印内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Golang logrus 日志包及日志切割的实现

    本文主要介绍 Golang 中最佳日志解决方案,包括常用日志包logrus的基本使用,如何结合file-rotatelogs包实现日志文件的轮转切割两大话题. Golang 关于日志处理有很多包可以使用,标准库提供的 log 包功能比较少,不支持日志级别的精确控制,自定义添加日志字段等.在众多的日志包中,更推荐使用第三方的 logrus 包,完全兼容自带的 log 包.logrus 是目前 Github 上 star 数量最多的日志库,logrus 功能强大,性能高效,而且具有高度灵活性,提供了

  • golang 输出重定向:fmt Log,子进程Log,第三方库logrus的详解

    独立 fmt Log输出重定向 golang的fmt包的输出函数 Println.Printf.PrintStack等,默认将打印输出到os.Stdout.错误打印输出到os.Stderr,os.Stdout 和 os.Stderr 默认值 /dev/stdout /dev/stderr 设备. //代码摘自:golang封装包 -> /lib/golang/src/os var ( Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin&q

  • golang日志框架之logrus的使用

    golang日志库 golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别.日志文件分割以及日志分发等方面并没有提供支持.所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位.golang中,流行的日志框架包括logrus.zap.zerolog.seelog等. logrus是目前Github上star数量最多的日志库,目前(2018.08,下同)star数量为8119,fo

  • go日志系统logrus显示文件和行号的操作

    logrus默认不支持显示文件名和行号,不太友好,但是在v1.2.0版本已经修复.可以通过setReportCaller设置即可显示文件名和行号 补充知识:logrus 的输出设置 O_RDONLY:只读模式(read-only) O_WRONLY:只写模式(write-only) O_RDWR:读写模式(read-write) O_APPEND:追加模式(append) O_CREATE:文件不存在就创建(create a new file if none exists.) O_EXCL:与

  • Go实现整合Logrus实现日志打印

    目录 1 初步使用 2 增加标签WithFields 3 配置常见参数 4 输出日志到文件 5 利用Hooks将日志输出到其他地方 Github:github.com/sirupsen/lo… 1 初步使用 package main import (   "context"   "github.com/sirupsen/logrus" ) ​ func main() {   method0() } func method0() {   logger:= logrus

  • springboot整合mybatis将sql打印到日志的实例详解

    在前台请求数据的时候,sql语句一直都是打印到控制台的,有一个想法就是想让它打印到日志里,该如何做呢? 见下面的mybatis配置文件: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-

  • Log4j 配置日志打印时区的实现方法

    og4j版本:2.8.1 开发桌面程序时遇到一个问题,idea中日志时间和CMD中jar包运行日志时间都正常,使用exe4j打成的exe运行后,日志的时间都要少8个小时,时区变得不对了 网上找了一圈发现没有类似问题的解决办法,后来终于在stack overflow 中找到相应的解决办法 在log4j2.xml配置文件中,进行如下配置即可 <!-- 输出日志格式 --> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS}{

  • springboot 配置日志 打印不出来sql的解决方法

    今天整合springboot2 + mybatis + logback 遇到了在日志中sql打印不出来的坑,在网上找了好久,都不是我遇到的问题,这里吐槽一下下现在的博客质量,好多都是抄袭的,也没有标注转载. 先说下要将sql打印到日志的配置 1.在mybatis.xml配置中增加以下配置 <!--指定 MyBatis 增加到日志名称的前缀.--> <setting name="logPrefix" value="m-shop-mybatis-sql.&quo

  • Spring Boot整合ELK实现日志采集与监控

    目录 Spring Boot整合ELK实现日志采集与监控 前言 架构图示 ELK搭建 Spring Boot工程配置 验证 查看logstash是否接收到日志 查看索引是否已经生效 日志分析 结语 Spring Boot整合ELK实现日志采集与监控 前言 在分布式项目中,可以采用ELK来作为日志的收集与分析系统,提供一个统一的入口来对日志进行收集,访问和管理.本文主要演示Spring Boot项目与ELK整合来实现日志的采集与监控. 架构图示 本次测试工程中,采用的架构如下图所示,微服务通过TC

  • Go标准库日志打印及同时输出到控制台与文件

    目录 打印 log包 如何输出日志到文件? 如何同时输出到控制台和文件? 附:日志切割(按文件大小切割.按日期切割) 总结 打印 在使用go写一些小程序时,我们没必要引入额外的包,直接使用fmt标准包打印即可: import "fmt" func main() { fmt.Println("line1") fmt.Print("line2") fmt.Printf("line%d \n", 3) str1 := fmt.Spr

  • python logging日志打印过程解析

    一. 基础使用 1.1 logging使用场景 日志是什么?这个不用多解释.百分之九十的程序都需要提供日志功能.Python内置的logging模块,为我们提供了现成的高效好用的日志解决方案.但是,不是所有的场景都需要使用logging模块,下面是Python官方推荐的使用方法: 任务场景 最佳工具 普通情况下,在控制台显示输出 print() 报告正常程序操作过程中发生的事件 logging.info()(或者更详细的logging.debug()) 发出有关特定事件的警告 warnings.

  • Flutter实战之自定义日志打印组件详解

    在Flutter中,如果我们需要打印日志,如果不进行自定义,我们只能使用自带的 print() 或者 debugPrint() 方法进行打印,但是这两种打印,日志都是默认 Info 层级的日志,很不友好,所以如果需要日志打印层级分明,我们就需要自定义一个日志打印组件,以下就来介绍如何自定义日志打印组件. 如何让输出的日志层级分明? 换种方式想,如果我们能在Flutter代码中,能够调用到原始Android中的Log组件,岂不是就能解决日志打印问题? 如何进行关联 在Flutter中,可以使用 M

  • 浅析springcloud 整合 zipkin-server 内存日志监控

    Zipkin Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献.其主要功能是聚集来自各个异构系统的实时监控数据. Zipkin主要包括四个模块  - Collector           接收或收集各应用传输的数据  - Storage            存储接受或收集过来的数据,当前支持Memory,MySQL,Cassandra,ElasticSea

  • springboot配置aop切面日志打印过程解析

    这篇文章主要介绍了springboot配置aop切面日志打印过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.SpringBoot Aop说明 1. Aop AOP(Aspect-Oriented Programming,面向切面编程),它利用一种"横切"的技术,将那些多个类的共同行为封装到一个可重用的模块.便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性. 2. AOP相关概念: Aspect

随机推荐