简单记录一下logrus实战应用,详细了解可以移步官网,这是直接使用

上代码:

logrus整个项目应用封装

package log

import (
"fmt"
"github.com/sirupsen/logrus"
"go_service/config"
"os"
"path"
"time"
)
var log = logrus.New()
func Debug(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.DebugLevel,fileds ,args)
logrus.WithFields(fileds).Debug(args)
}
func Info(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.InfoLevel,fileds ,args)
logrus.WithFields(fileds).Info(args)
}
func Warn(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.WarnLevel,fileds ,args)
logrus.WithFields(fileds).Warn(args)
}
func Fatal(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.FatalLevel,fileds ,args)
logrus.WithFields(fileds).Fatal(args)
}
func Error(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.ErrorLevel,fileds ,args)
log.WithFields(fileds).Error(args)
}
func Panic(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.PanicLevel,fileds ,args)
logrus.WithFields(fileds).Panic(args)
}
func Trace(fileds logrus.Fields,args ...interface{}) {
setOutPutFile(logrus.TraceLevel,fileds ,args)
logrus.WithFields(fileds).Trace(args)
}
//level logrus.Level
func setOutPutFile(level logrus.Level,fileds logrus.Fields,args ...interface{}) {
if _,err := os.Stat(config.BaseConf.Log.Dir);os.IsNotExist(err){
err = os.MkdirAll(config.BaseConf.Log.Dir,0777)
if err != nil {
panic(fmt.Errorf("create log dir '%s' error:%s",config.BaseConf.Log.Dir,err))
}
}
fileName := path.Join("./"+config.BaseConf.Log.Dir,time.Now().Format("2006-01-02") + ".log")
var err error
files,err := os.OpenFile(fileName,os.O_WRONLY|os.O_APPEND|os.O_SYNC|os.O_CREATE|os.O_RDWR,0766)
if err != nil{
fmt.Print("open log file err",err)
}else{
log.Out = files
}
logrus.SetOutput(files)
logrus.SetLevel(level)
return
}

这里日志文件我是根据自己的需求,每天一个日志文件,可以根据自己的习惯应用去设置日志的生成;

日志问价位置配置

config文件下

config.yaml

log:
dir: /logs/

config.go

package config

import (
"gopkg.in/yaml.v2"
"io/ioutil"
) var BaseConf Config type LogConf struct {
Dir string `yaml:"dir"`
}
type Config struct {
Log LogConf `yaml:"log"`
} func Init() {
confPath := "config/config.yaml" if yamlFile,err:= ioutil.ReadFile(confPath);err != nil {
panic("read config err:" + err.Error())
}else if err = yaml.Unmarshal(yamlFile,&BaseConf); err != nil{
panic("conf file unmarshal error:"+err.Error())
}
}

这里配置日志文件位置,当然也是可以直接写的,但是在建议配置在一个文件中,然后项目启动是调用

r := gin.Default()
//r.Use(middleware.LoggerToFile())
config.Init()

然后就是项目使用

log.Error(logrus.Fields{"err":err.Error(),"source":pkg.GetPath()},"Model - FindArticle - Count")

这其中pkg.GetPath()是获取当前执行文件的路径以及报错行数

pak方法

package pkg

import (
"runtime"
"strconv"
) func GetPath() string {
_,path,line,_:= runtime.Caller(1)
response := path +":" + strconv.Itoa(line)
return response
}

后面呈现打印的日志



至于中间件,如果是大型项目多台服务器,使用更好,我这没必要也就没写入,下面直接放中间件代码:

package middleware

import (
"bytes"
"github.com/gin-gonic/gin"
"github.com/sirupsen/logrus"
"go_service/log"
"io/ioutil"
"time"
) func LoggerToFile() gin.HandlerFunc {
return func(ctx *gin.Context) {
//开始时间
start := time.Now()
//请求报文
var resquestBody []byte if ctx.Request.Body != nil{
var err error
resquestBody,err = ctx.GetRawData()
if err != nil {
log.Warn(logrus.Fields{"err":err.Error()},"get http request")
}
ctx.Request.Body = ioutil.NopCloser(bytes.NewBuffer(resquestBody))
}
//处理请求
ctx.Next()
//结束时间
end := time.Now() log.Info(map[string]interface{}{
"statsCode":ctx.Writer.Status(),
"cost":float64(end.Sub(start).Nanoseconds()/1e4)/100.0,
"clientlp":ctx.ClientIP(),
"method":ctx.Request.Method,
"url":ctx.Request.RequestURI,
})
}
}

在启动项目时使用

r := gin.Default()
r.Use(middleware.LoggerToFile())

打印日志:



肯定有更好的方法,但是自己没研究出来,就先使用的现在的封装

本文连接:点击

博主个人小博客:嘿嘿

go logrus实战应用的更多相关文章

  1. SSH实战 · 唯唯乐购项目(上)

    前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...

  2. GitHub实战系列汇总篇

    基础: 1.GitHub实战系列~1.环境部署+创建第一个文件 2015-12-9 http://www.cnblogs.com/dunitian/p/5034624.html 2.GitHub实战系 ...

  3. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  4. Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  5. 给缺少Python项目实战经验的人

    我们在学习过程中最容易犯的一个错误就是:看的多动手的少,特别是对于一些项目的开发学习就更少了! 没有一个完整的项目开发过程,是不会对整个开发流程以及理论知识有牢固的认知的,对于怎样将所学的理论知识应用 ...

  6. asp.net core 实战之 redis 负载均衡和"高可用"实现

    1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是 ...

  7. Linux实战教学笔记08:Linux 文件的属性(上半部分)

    第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...

  8. Linux实战教学笔记07:Linux系统目录结构介绍

    第七节 Linux系统目录结构介绍 标签(空格分隔):Linux实战教学笔记 第1章 前言 windows目录结构 C:\windows D:\Program Files E:\你懂的\精品 F:\你 ...

  9. Linux实战教学笔记06:Linux系统基础优化

    第六节 Linux系统基础优化 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 基础环境 第2章 使用网易163镜像做yum源 默认国外的yum源速度很慢,所以换成国内的. 第一步:先备份 ...

随机推荐

  1. 用华为MindSpore框架训练数据库类型的数据集

    技术背景 在前面一篇博客我们讲到三种用python去读取一个文件的指定行的操作,最终给出的一个结论大概是,对于大型的数据而言,最快的找到指定行的方法是Linux系统自带的sed指令,那么是否只有这一种 ...

  2. Jenkins+gitlab发布Django程序

    Jenkins+gitlab发布Django程序 一. 二. 三.shell # !/bin/bash cd /root/upload_file #git add . #git commit -m ' ...

  3. linux ( crontab 定时任务命令)

    linux ( crontab 定时任务命令)    crontab 定时任务命令 linux 系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工 ...

  4. Python+Selenium - js操作

    js操作:日期框 本部分涉及两个知识点:DOM树和js DOM树教程链接: https://www.w3school.com.cn/htmldom/index.asp js教程链接 https://w ...

  5. NVIDIA安培架构

    NVIDIA安培架构 NVIDIA Ampere Architecture In-Depth 在2020年英伟达GTC主题演讲中,英伟达创始人兼首席执行官黄仁勋介绍了基于新英伟达安培GPU架构的新英伟 ...

  6. JMeter使用教程2——MySQL压测

    之前写过一篇JMeter使用教程,只是介绍了http请求的压力测试,想到MySQL的测试也挺必要的,于是写下这篇记录一下.如果不知道怎么下载和安装,可以看一下上一篇关于JMeter的文章,地址是:ht ...

  7. th:insert、th:replace、th:include抽取和引用页面公共片段、传参等

    一.抽取公共片段 th:fragment  给片段命名 将公共片段抽取出来,并在顶级标签内使用th:fragment给该片段命名. 例如:将公共片段抽取出来放到comment/bar.html中: & ...

  8. 使用allure工具生成测试报告(基于pytest框架)

    一.allure简介:一个轻量级的,灵活的,支持多语言,多平台的开源report框架 Allure基于标准的xUnit结果输出,但是添加了一些补充数据.任何报告都是通过两个步骤生成的.在测试执行期间( ...

  9. 二、特殊DNS解析

    一.DNS轮询 1.为站点 www.tedu.cn 提供DNS轮询解析,三台Web服务器节点的IP地址分别为: 192.168.4.10.192.168.4.20.192.168,4.30 步骤: 虚 ...

  10. 使用charles抓取https的方法

    自己整理的步骤做个记录 1.下载证书,官方地址:http://www.charlesproxy.com/ssl.zip 可直接点击链接下载:http://charlesproxy.com/getssl ...