定义自己的logger

package myloggerimport ("errors""fmt""os""sync""time"
)//Logger 日志,实现了Write接口
var Logger *loggertype logger struct {t  time.Timefp *os.Filem  sync.RWMutex
}//init 创建runtime目录,并初始化Logger
func init() {if !isDir("runtime") {err := os.Mkdir("runtime", 0755)if err != nil {panic("无法创建runtime目录")}}Logger = new()
}//Write 实现Write接口,用于写入
func (l *logger) Write(p []byte) (n int, err error) {today := dateToStr(time.Now())loggerDate := dateToStr(l.t)//如果当前日期与logger日期不一致,表示是新的一天,需要关闭原日志文件,并更新日期与日志文件if today != loggerDate && l.fp != nil {l.fp.Close()l.fp = nil}if l.fp == nil {l.setLogfile()}//写入if l.fp != nil {return l.fp.Write(p)}return 0, errors.New("无法写入日志")
}//new 初始化
func new() *logger {l := &logger{t: time.Now(),}l.setLogfile()return l
}//setLogfile 更新日志文件
func (l *logger) setLogfile() error {year, month, day := time.Now().Date()dir := fmt.Sprintf("runtime/%d/%02d", year, month)//锁住,防止并发时,多次执行创建。os.MkdirAll在目录存在时,也不会返回错误,锁不锁都行l.m.Lock()defer l.m.Unlock()if !isDir(dir) {err := os.MkdirAll(dir, 0755)return err}logfile := fmt.Sprintf("%s/%02d.log", dir, day)//打开新的日志文件,用于写入fp, err := os.OpenFile(logfile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)if err != nil {return err}l.fp = fpreturn nil
}//isDir 是否是目录
func isDir(path string) bool {s, err := os.Stat(path)if err != nil {return false}return s.IsDir()
}//dateToStr 时间转换为日期字符串
func dateToStr(t time.Time) string {return t.Format("2006-01-02")
}

使用logger

package mainimport ("net/http""test/mylogger" //我的项目叫test"github.com/gin-gonic/gin"
)func main() {gin.DisableConsoleColor()r := gin.New()//使用myloggergin.DefaultWriter = mylogger.Loggerr.GET("/", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"code": 200,"msg":  "success",})})r.Run(":8080")
}

原理:每次写入日志时,判断当前日期与Logger变量中记录的日期是否相同,如果不同就关闭原来的日志文件,并打开一个新的日志文件。

gin 【日志记录】每天一个日志文件相关推荐

  1. oracle数据库日志记录内容,oracle日志记录方式

    oracle日志记录模式 oracle 日志记录模式(LOGGING.FORCE LOGGING.NOLOGGING) 1.LOGGING(默认):当创建一个数据库对象时将记录日志信息到联机重做日志文 ...

  2. java 文件日志_Java日志记录-我的日志文件在哪里?

    我在查找日志文件时遇到问题. 我java.util.logging在Windows XP的Eclipse 3.7.1中使用Java日志记录- .我logging.properties文件的相关行是: ...

  3. 【Python】Flask日志记录:将日志输出到多个文件、显示行号、模块名称、日志级别等

    参考文章:Flask使用日志记录到文件示例-博客园 flask的日志记录需要用到python标准库logging的支持. 示例 # -*- coding: utf-8 -*-from flask im ...

  4. 把Hybris安装时输出的日志重定向到一个本地文件中

    我在本地安装Hybris时遇到一些错误,我想把输出的信息保存到一个本地文件里: [java] de.hybris.platform.core.UninstantiableCoreApplication ...

  5. 开启mysql日志记录_Mysql开启日志记录

    vim /etc/my.conf.d/server.cnf: #lower_case_tables_name = 1 #错误日志 log_error = /var/log/mysql_error.lo ...

  6. 基于.NetCore3.1系列 —— 日志记录之自定义日志组件

    前言 回顾:日志记录之日志核心要素揭秘 在上一篇中,我们通过学习了解在.net core 中内置的日志记录中的几大核心要素,在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器(IL ...

  7. Linux日志记录服务,日志管理工具

    syslog 简介: syslog是一种广泛使用的日志记录服务,用于记录系统和应用程序的事件,详细记录包括时间戳.主机IP地址.应用程序名称.优先级.消息内容等信息.syslog有三个主要部分:客户端 ...

  8. java aop日志记录_AOP实现日志记录功能

    场景:整个系统的DML操作需要记录日志 记录内容:1 操作人 2 操作时间 3 操作类型(登录 新增 修改 删除) 4 操作描述  5 详细请求数据(varchar2()) 6 操作IP  ==> ...

  9. linux中mysql数据库启用日志记录_MYSQL启用日志,和查看日志

    mysql有以下几种日志: 错误日志:     -log-err 查询日志:     -log 慢查询日志:   -log-slow-queries 更新日志:     -log-update 二进制 ...

  10. 数据库MySQL/mariadb知识点——日志记录(2)二进制日志

    二进制日志 记录已提交事务导致数据改变或潜在导致数据改变的SQL语句,通过"重放"日志文件中的事件来生成数据副本,不依赖存储引擎类型. 开启二进制日志,默认是关闭的,二进制日志和数 ...

最新文章

  1. autocad不能画图_设计院老司机谈CAD:学习AutoCAD掌握方法技巧更重要
  2. 本周值得读:13 份最新开源「Paper + Code」
  3. 处理字符串_6_拆分字符串里的字符和数
  4. 杭电ACM_1016_素数环
  5. f分布表完整图_【教育统计答疑】如何理解正态分布、均值分布、^2分布、t分布和F分布...
  6. 2台服务器负载均衡后synchronized_一篇有趣的负载均衡算法实现
  7. 微型计算机中 奔三 指,计算机基础知识180题.docx
  8. 已解决 selenium.common.exceptions.NoSuchWindowException: Message: no such window
  9. Django视图系统
  10. java 内部类_我有心上人了,Java内部类
  11. 影院售票系统 php源码,影院售票系统
  12. 联想官方一键关闭Win10Defender、关闭Win10自动更新工具
  13. 小知识 定位测绘领域中全站仪/接收机RTK精度1cm+1ppm的含义
  14. 用SQL实现取员工日工作量和月工作量
  15. 作为一个程序员,你真的知道如何学好编程吗?
  16. 2.ECMAScript6详解
  17. HQChart使用教程68 - 配置DRAWTEXT, DRAWICON, DRAWNUMBER字体大小
  18. 计算机音乐好想你曲谱,好想你简谱
  19. Android实现记事本功能
  20. 亲测可用|亚信防毒墙网络版卸载图文教程

热门文章

  1. 中国国际“互联网+”大学生创新创业大赛 武汉理工大学总决赛斩获双金
  2. java中finally语句是否一定会被执行
  3. 如何彻底禁止易升更新Win10自动更新
  4. 移动拨号上网开热点(不是360开热点,而是使用电脑自带的热点功能)详解
  5. texstudio暗色主题2.0
  6. JAY和ZOOM,还有铁面人究竟是谁?
  7. P老师需要去商店买n支铅笔作为小朋友们参加NOIP的礼物。她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。
  8. 外星人计算机组装配置方案,最好的电脑配置_2020年最强最牛的笔记本配置与组装电脑方案...
  9. 谷歌浏览器,退出时;调用退出的方法,vue
  10. VB利用API画线性渐变矩形