Go语言日志框架logrus封装

logrus在github上是一个star数比较高的go日志框架,简单封装如下:

package log
import (
"fmt"
"github.com/Sirupsen/logrus"
"runtime"
"strings"
)
var logger = logrus.New()
// 封装logrus.Fields
type Fields logrus.Fields
func SetLogLevel(level logrus.Level) {
logger.Level = level
}
func SetLogFormatter(formatter logrus.Formatter) {
logger.Formatter = formatter
}
// Debug
func Debug(args ...interface{}) {
if logger.Level >= logrus.DebugLevel {
entry := logger.WithFields(logrus.Fields{})
entry.Data["file"] = fileInfo(2)
entry.Debug(args)
}
}
// 带有field的Debug
func DebugWithFields(l interface{}, f Fields) {
if logger.Level >= logrus.DebugLevel {
entry := logger.WithFields(logrus.Fields(f))
entry.Data["file"] = fileInfo(2)
entry.Debug(l)
}
}
// Info
func Info(args ...interface{}) {
if logger.Level >= logrus.InfoLevel {
entry := logger.WithFields(logrus.Fields{})
entry.Data["file"] = fileInfo(2)
entry.Info(args...)
}
}
// 带有field的Info
func InfoWithFields(l interface{}, f Fields) {
if logger.Level >= logrus.InfoLevel {
entry := logger.WithFields(logrus.Fields(f))
entry.Data["file"] = fileInfo(2)
entry.Info(l)
}
}
// Warn
func Warn(args ...interface{}) {
if logger.Level >= logrus.WarnLevel {
entry := logger.WithFields(logrus.Fields{})
entry.Data["file"] = fileInfo(2)
entry.Warn(args...)
}
}
// 带有Field的Warn
func WarnWithFields(l interface{}, f Fields) {
if logger.Level >= logrus.WarnLevel {
entry := logger.WithFields(logrus.Fields(f))
entry.Data["file"] = fileInfo(2)
entry.Warn(l)
}
}
// Error
func Error(args ...interface{}) {
if logger.Level >= logrus.ErrorLevel {
entry := logger.WithFields(logrus.Fields{})
entry.Data["file"] = fileInfo(2)
entry.Error(args...)
}
}
// 带有Fields的Error
func ErrorWithFields(l interface{}, f Fields) {
if logger.Level >= logrus.ErrorLevel {
entry := logger.WithFields(logrus.Fields(f))
entry.Data["file"] = fileInfo(2)
entry.Error(l)
}
}
// Fatal
func Fatal(args ...interface{}) {
if logger.Level >= logrus.FatalLevel {
entry := logger.WithFields(logrus.Fields{})
entry.Data["file"] = fileInfo(2)
entry.Fatal(args...)
}
}
// 带有Field的Fatal
func FatalWithFields(l interface{}, f Fields) {
if logger.Level >= logrus.FatalLevel {
entry := logger.WithFields(logrus.Fields(f))
entry.Data["file"] = fileInfo(2)
entry.Fatal(l)
}
}
// Panic
func Panic(args ...interface{}) {
if logger.Level >= logrus.PanicLevel {
entry := logger.WithFields(logrus.Fields{})
entry.Data["file"] = fileInfo(2)
entry.Panic(args...)
}
}
// 带有Field的Panic
func PanicWithFields(l interface{}, f Fields) {
if logger.Level >= logrus.PanicLevel {
entry := logger.WithFields(logrus.Fields(f))
entry.Data["file"] = fileInfo(2)
entry.Panic(l)
}
}
func fileInfo(skip int) string {
_, file, line, ok := runtime.Caller(skip)
if !ok {
file = "<???>"
line = 1
} else {
slash := strings.LastIndex(file, "/")
if slash >= 0 {
file = file[slash+1:]
}
}
return fmt.Sprintf("%s:%d", file, line)
}


版权声明:著作权归作者所有。

相关推荐

ASP.NET Core 2.0 日志配置

ASP.NET Core 2.0的日志系统做了break change的升级。.NET Core 2.0日志配置的改变主要体现在三点:使用新的方法AddLogging和Builder API配置services允许在Program.cs使用WebHostBuilder配置日志 ASP.NET Core 2.0模板里的W

如何修改Git已提交的日志

在某些时候,你发现了之前提交到git上的日志描述不全或者描述有误,这时你是会想要修改它的。 但提交已经是push到服务器,甚至是已经有好几个提交在后面了,这个怎么办呢?Git提供了一些方法来修改。下面分为四种情况来处理。情况一:最后一次提交且未push执行以下命令:git commit --amend git会打开$EDITOR编辑器,它会加载这次提交的日志,这样我们

[译]iOS开发可复用框架入门(实例)

当你编写一个iOS应用程序时,你通常会什么都不想就导入Foundation或UIKit框架。 如果要使用字符串,日期,文件系统或线程,可以导入Foundation。如果要使用UITableViewController或UIAlertController,则可以导入UIKit。 如果你导入了UIKit,那么可以完全忽略Foundation,因为UIKit在后台会导入它。关键是这些

基于RxJava和Kotlin封装类处理网络加载数据

在Android开发里,常常需要处理网络加载数据,这里基于RxJava,和Kotlin的Sealed class(封装类)的特性实现的一个示例。Resource.kt首先使用Kotlin的sealed class实现Resource.kt,它用来包装数据和状态。sealed class Resource<out T> { &n

使用awk分析nginx访问日志access.log的ip

access.log为nginx的访问日志,默认路径在/var/log/nginx/access.log 分析access.log的ip命令如下:awk '{print $1}' access.log |sort|uniq -c|sort -n 命令里使用awk过滤出访问的ip使用sort对ip排序对排序后的ip进行统计,统计每一个ip访

Spring Boot:日志集成

Java日志框架Java有好几个日志框架,我们有时在选择Java日志框架时会有点迷惑。下面几个是常用的日志框架Common Logging:Apache最早提供的日志的门面接口。避免和具体的日志方案直接耦合。SLF4J(Simple Logging Facade for JAVA):和Common Logging一样,是一个门面框架,是对