Go Logger

一个简单而强大的 golang 日志工具包
授权协议 MIT
开发语言 Google Go
所属分类 程序开发、 日志工具(Logging)
软件类型 开源软件
地区 国产
投 递 者 何甫
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

go-logger

一个简单而强大的 golang 日志工具包

godoc license Build Status 

English document

功能

  • 支持同时输出到 console, file, url
  • 命令行输出字体可带颜色
  • 文件输出支持根据 文件大小,文件行数,日期三种方式切分
  • 文件输出支持根据日志级别分别保存到不同的文件
  • 支持异步和同步两种方式写入
  • 支持 json 格式化输出
  • 代码设计易扩展,可根据需要设计自己的 adapter

安装使用

go get github.com/phachon/go-logger
go get ./...

环境需要

go 1.8

支持输出

  • console // 输出到命令行
  • file // 文件
  • api // http url 接口
  • ...

快速使用

  • 同步方式
import (
    "github.com/phachon/go-logger"
)
func main()  {
    logger := go_logger.NewLogger()

    logger.Info("this is a info log!")
    logger.Errorf("this is a error %s log!", "format")
}
  • 异步方式
import (
    "github.com/phachon/go-logger"
)
func main()  {
    logger := go_logger.NewLogger()
    logger.SetAsync()

    logger.Info("this is a info log!")
    logger.Errorf("this is a error %s log!", "format")

    // 程序结束前必须调用 Flush
    logger.Flush()
}
  • 多个输出
import (
    "github.com/phachon/go-logger"
)
func main()  {
    logger := go_logger.NewLogger()

    logger.Detach("console")

    // 命令行输出配置
    consoleConfig := &go_logger.ConsoleConfig{
        Color: true, // 命令行输出字符串是否显示颜色
        JsonFormat: true, // 命令行输出字符串是否格式化
        Format: "" // 如果输出的不是 json 字符串,JsonFormat: false, 自定义输出的格式
    }
    // 添加 console 为 logger 的一个输出
    logger.Attach("console", go_logger.LOGGER_LEVEL_DEBUG, consoleConfig)

    // 文件输出配置
    fileConfig := &go_logger.FileConfig {
        Filename : "./test.log", // 日志输出文件名,不自动存在
        // 如果要将单独的日志分离为文件,请配置LealFrimeNem参数。
        LevelFileName : map[int]string {
            logger.LoggerLevel("error"): "./error.log",    // Error 级别日志被写入 error .log 文件
            logger.LoggerLevel("info"): "./info.log",      // Info 级别日志被写入到 info.log 文件中
            logger.LoggerLevel("debug"): "./debug.log",    // Debug 级别日志被写入到 debug.log 文件中
        },
        MaxSize : 1024 * 1024,  // 文件最大值(KB),默认值0不限
        MaxLine : 100000, // 文件最大行数,默认 0 不限制
        DateSlice : "d",  // 文件根据日期切分, 支持 "Y" (年), "m" (月), "d" (日), "H" (时), 默认 "no", 不切分
        JsonFormat: true, // 写入文件的数据是否 json 格式化
        Format: "" // 如果写入文件的数据不 json 格式化,自定义日志格式
    }
    // 添加 file 为 logger 的一个输出
    logger.Attach("file", go_logger.LOGGER_LEVEL_DEBUG, fileConfig)


    logger.Info("this is a info log!")
    logger.Errorf("this is a error %s log!", "format")
}

命令行下的文本带颜色效果

image

自定义格式化输出

你想要自定义日志输出格式 ?

Logger Message

字段 别名 类型 说明 例子
Timestamp timestamp int64 Unix时间戳 1521791201
TimestampFormat timestamp_format string 时间戳格式化字符串 2018-3-23 15:46:41
Millisecond millisecond int64 毫秒时间戳 1524472688352
MillisecondFormat millisecond_format string 毫秒时间戳格式化字符串 2018-3-23 15:46:41.970
Level level int 日志级别 1
LevelString level_string string 日志级别字符串 Error
Body body string 日志内容 this is a info log
File file string 调用本次日志输出的文件名 main.go
Line line int 调用本次日志输出的方法 64
Function function string 调用本次日志输出的方法名 main.main


配置 Format 参数:

consoleConfig := &go_logger.ConsoleConfig{
    Format: "%millisecond_format% [%level_string%] %body%"
}
fileConfig := &go_logger.FileConfig{
    Format: "%millisecond_format% [%level_string%] %body%"
}

输出结果:

2018-03-23 14:55:07.003 [Critical] this is a critical log!

你只需要配置参数 Format: "% Logger Message 别名%" 来自定义输出字符串格式

更多的 adapter 例子

性能测试结果

参考

beego/logs : github.com/astaxie/beego/logs

反馈

欢迎提交意见和代码,联系信息 phachon@163.com

License

MIT

谢谢

Create By phachon@163.com

  • package main; import ( "log" "os" "time" "fmt" ) func main() { //创建输出日志文件 logFile, err := os.Create("./" + time.Now().Format("20060102") + ".txt"); if err != nil { fmt.Println(err); } //

  • go-logger 是golang 的日志库 ,基于对golang内置log的封装。 用法类似java日志工具包log4j 打印日志有5个方法 Debug,Info,Warn, Error ,Fatal  日志级别由低到高 设置日志级别的方法为:logger.SetLevel() 如:logger.SetLevel(logger.WARN) 则:logger.Debug(....),logger.

  • 首先下载log4go 包 命令:go get github.com/alecthomas/log4go 一,创建loggerUtils.go 工具: package utils import ( logger "github.com/alecthomas/log4go" ) var logger1File = "D:/temp/demo1.log" var Logger1 = logger.

  • 论坛的解决思路 Is it possible to wrap logrus.Logger functions without losing the line number prefix? func Info(args ...interface{}) { if logger.Level >= logrus.InfoLevel { entry := logger.WithFie

  • https://learnku.com/docs/gorm/2018/logger/3805 Gorm 建立了对 Logger 的支持,默认模式只会在错误发生的时候打印日志。可以通过gorm SetLogger(log logger)方法 改变gorm 打日志的行为。 gorm 中 logger的接口 gorm 中 logger的接口: type logger interface { Print

  • 转载自李文周的博客 logrus介绍 Logrus是Go(golang)的结构化logger,与标准库logger完全API兼容。 它有以下特点: 完全兼容标准日志库,拥有七种日志级别:Trace, Debug, Info, Warning, Error, Fataland Panic。 可扩展的Hook机制,允许使用者通过Hook的方式将日志分发到任意地方,如本地文件系统,logstash,el

  • def initLogger(): logdir = time.strftime("%Y-%m-%d", time.localtime(time.time())) if not os.path.exists(logdir): os.mkdir(logdir) # logdir = time.strftime("%Y-%m-%d-%H_%M_%S", time

  • 日志记录器(Logger)是日志处理的核心组件。log4j具有5种正常级别(Level)。日志记录器(Logger)的可用级别Level (不包括自定义级别 Level), 以下内容就是摘自log4j API (http://jakarta.apache.org/log4j/docs/api/index.html): static Level WARN WARN level表明会出现潜在错误的情形

  • 一、安装方法: go get github.com/sirupsen/logrus 二、遇到问题:         如果没有翻墙无法下载golang.org/x/sys/unix包,         请参考:https://blog.csdn.net/wsliangjian/article/details/97253595,其他无法下载的golang.org的包均可参照此方法尝试   三、将日志写

  • package main import ( "log" ) // 使用init 函数,这个函数在main 函数执行之前就可以初始化 // 自定义的日志抬头信息为:时间 + 文件名 + 源代码所在行号(就是log.Ldata | log.Lshortfile) // 通过log.SetFlags 进行设置 func init() { //log.SetFlags(log.Ldate | lo

  • 在我们开发程序后,如果有一些问题需要对程序进行调试的时候,日志是必不可少的,这是我们分析程序问题常用的手段。   日志使用   日志分析,就是根据输出的日志信息,分析挖掘可能的问题,我们使用fmt.Println系列函数也可以达到目的,因为它们也可以把我们需要的信息输出到终端或者其他文件中。不过fmt.Println系列函数输出的系统比较简单,比如没有时间,也没有源代码的行数等,对于我们排查问题,

  • main.cpp #include "spdlog/sinks/rotating_file_sink.h" #include "spdlog/sinks/stdout_color_sinks.h" #include "spdlog/spdlog.h" #include <iostream> int main() {   // logger   auto console_sink = std::ma

  • 日志 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列(Print|Printf|Println)、Fatal系列(Fatal|Fatalf|Fatalln)、和Panic系列(Panic|Panicf|Panicln)来使用,比自行创建一个logger对象更容易使用。 例如,我们可以像

  • Go语言标准库log介绍 无论是软件开发的调试阶段还是软件上线之后的运行阶段,日志一直都是非常重要的一个环节,我们也应该养成在程序中记录日志的好习惯。 log Go语言内置的log包实现了简单的日志服务。本文介绍了标准库log的基本使用。 使用Logger log包定义了Logger类型,该类型提供了一些格式化输出的方法。本包也提供了一个预定义的“标准”logger,可以通过调用函数Print系列

 相关资料
  • Guava提供了很多类似java.util.Collections的静态工具类 Guava中工具类与集合的对应关系如下: 集合接口 来自于JDK/Guava 对应的Guava工具类 Collection JDK Collections2 List JDK Lists Set JDK Sets SortedSet JDK Sets Map JDK Maps SortedMap JDK Maps Qu

  • 本文向大家介绍python实现一个简单的ping工具方法,包括了python实现一个简单的ping工具方法的使用技巧和注意事项,需要的朋友参考一下 继上一篇计算checksum校验和,本章通过socket套接字,struct字节打包成二进制,select返回套接字的文件描述符的结合,实现一个简单的ping工具。 引用: https://docs.python.org/3/library/socke

  • 本文向大家介绍python实现简单日期工具类,包括了python实现简单日期工具类的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现简单日期工具类的具体代码,供大家参考,具体内容如下 输出结果如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 日志是非常重要的系统文件,管理员每天的重要工作就是分析和查看服务器的日志,判断服务器的健康状态。但是日志管理又是一项非常枯燥的工作,如果需要管理员手工查看服务器上所有的日志,那实在是一项非常痛苦的工作。有些管理员就会偷懒,省略日志的检测工作,但是这样做非常容易导致服务器出现问题。 那么我们有取代的方案吗?有,那就是日志分析工具。这些日志分析工具会详细地查看日志,同时分析这些日志,并且把分析的结果通

  • 1. 介绍 本篇会介绍三个关于分析nginx日志信息的工具。 2. nginx_log_analysis 这个工具是由一位叫LEO的网友提供的,它的博客是http://linux5588.blog.51cto.com/,它是用python语言写的,只是用来分析nginx日志,它的输出比较简单,以IP为主,可以查看每个IP的访问的流量,次数,占比等信息。 先获取这个python文件。 # 下载 $

  • IIS 6.0 日志导入工具是一个服务器日志分析工具,因为我们对文本内容分析起来非常吃力, 通常第一步是先导入数据库,而手工导入到数据库又是一个费时费力的事情, IIS 6.0 日志导入工具专门针对导入这一步而开发; 其特点如下: 1.针对访问日志量大,单个文件几百MB,或几个GB的日志导入; 2.导入速度非常快,采用OLEDB ODBC底层驱动; 3.采用SQL Server 批量导入接口,快速

  • 本文向大家介绍Python实现一个Git日志统计分析的小工具,包括了Python实现一个Git日志统计分析的小工具的使用技巧和注意事项,需要的朋友参考一下 前言 本文介绍的是利用Python实现的一个小工具,用于分析Git commit log,获得Git Project每个成员的简单行为数据。 Warning:代码量不能代表程序员能力水平! 启动参数 共5个。 Repo地址 Commit 起始日

  • 本文向大家介绍Golang logrus 日志包及日志切割的实现,包括了Golang logrus 日志包及日志切割的实现的使用技巧和注意事项,需要的朋友参考一下 本文主要介绍 Golang 中最佳日志解决方案,包括常用日志包logrus 的基本使用,如何结合file-rotatelogs 包实现日志文件的轮转切割两大话题。 Golang 关于日志处理有很多包可以使用,标准库提供的 log 包功能