logger

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 26, 2020 License: Apache-2.0 Imports: 17 Imported by: 0

README

loggerX 日志组件库

[开发文档]

​ 日志作为整个代码行为的记录,是程序执行逻辑和异常最直接的反馈 ,xesLogger日志组件,插件化支持,支持标准输出和高性能磁盘写入,多样化的配置方式,使用起来简单方便,7个日志级别满足项目中各种需求。

1.下载安装
go get -u github.com/tal-tech/loggerX 
2.main函数中初始化logger:
  • 使用xml配置文件:
    logger.InitLogger("conf/log.xml")  //xml配置地址  
    defer logger.Close() 
    
    • log.xml配置文件示例:

       xxxxxxxxxx <logging>    <filter enabled="false">         <tag>stdout</tag>           <!-- 控制台输出日志 -->        <type>console</type>             <!-- level is (:?FINEST|FINE|DEBUG|TRACE|INFO|WARNING|ERROR) -->        <level>DEBUG</level>        <!-- 日志级别 -->    </filter>    <filter enabled="true">        <!-- 文件输出日志 -->        <tag>goentry</tag>                <type>file_trace</type>          <level>INFO</level>           <!-- 日志存储路径 -->         <property name="filename">/home/logs/xeslog/teacherpanel/teacherpanel.log</property>         <!--        %T - Time (15:04:05 MST) 时间格式        %t - Time (15:04)        %D - Date (2006/01/02)   日期格式        %d - Date (01/02/06)        %L - Level (FNST, FINE, DEBG, TRAC, WARN, EROR, CRIT)  打印级别        %S - Source          %M - Message        It ignores unknown format strings (and removes them)        Recommended: "[%D %T] [%L] (%S) %M"        -->        <!-- 格式化输出日志 -->         <property name="format">%G %L %S %M</property>        <property name="rotate">true</property> <!-- true enables log rotation, otherwise append --> <property name="maxsize">0M</property> <!-- \d+[KMG]? Suffixes are in terms of 2**10 -->        <property name="maxlines">0K</property> <!-- \d+[KMG]? Suffixes are in terms of thousands -->        <property name="daily">true</property> <!-- Automatically rotates when a log message is written after midnight -->    </filter></logging>
      
  • 使用自定义配置:
       config := logger.NewLogConfig()
       config.Level="WARNING"  //更新其他配置     
       logger.InitLogWithConfig(config)  
       defer logger.Close() 
    
    • 配置说明:

         config格式及默认值 
         //存储路径  默认值 /home/logs/xeslog/default/default.log
         LogPath string  
         //日志级别  默认值 INFO   
         Level string  
         //日志标签 多日志时使用  默认值 default  
         Tag string    
         //日志格式  默认值  "%G %L %S %M"  G=>isoTime L=>level  S=>source  M=>msg    
         Format string  
         //最大行数切割  默认值  0K  支持K\M\G\k\m\g 单位1000  
         RotateLines string  
         //最大容量切割  默认值  0M  支持K\M\G\k\m\g 单位1024  
         RotateSize string  
         //按日期切割   默认值 true  
         RotateDaily bool   
      
    • 使用ini配置:
        logMap := confutil.GetConfStringMap("log")  //通过配置文件转为map[string]string     
         config := logger.NewLogConfig()
         config.SetConfigMap(logMap)    
         logger.InitLogWithConfig(config)   
         defer logger.Close() 
      
      • ini文件配置内容:

           //指定字段更新,不指定使用默认值    
           [log]      
           LogPath=/home/logs/xeslog/logpath/log.log   
           Level=DEBUG   
           RotateSize=2G   
           RotateDaily=false 
        
3.打印日志方法
  • 支持不同级别打印日志的方法:
logger.I(tag string, args interface{}, v ...interface{})  
logger.T(tag string, args interface{}, v ...interface{})  
logger.D(tag string, args interface{}, v ...interface{})  
logger.W(tag string, args interface{}, v ...interface{})  
logger.E(tag string, args interface{}, v ...interface{})  
logger.C(tag string, args interface{}, v ...interface{})  
logger.F(tag string, args interface{}, v ...interface{})  //级别同CRITICAL,但触发panic  
logger.Ix(ctx context.Context, tag string, args interface{}, v ...interface{})  
logger.Tx(ctx context.Context, tag string, args interface{}, v ...interface{})  
logger.Dx(ctx context.Context, tag string, args interface{}, v ...interface{})  
logger.Wx(ctx context.Context, tag string, args interface{}, v ...interface{})   
logger.Ex(ctx context.Context, tag string, args interface{}, v ...interface{})  
  • 使用用例:
logger.I("TESTFUNCTAG","data save to mysql, uid:%d ,name:%s",100,"学生1")   
logger.Ix(ctx,"TESTFUNCTAG","data save to mysql, uid:%d ,name:%s",100,"学生1")  
logger.E("TESTFUNCTAG","get redis error:%v, uid:%d ,name:%s",err,100,"学生1")   
logger.Ex(ctx,"TESTFUNCTAG","get redis error:%v, uid:%d ,name:%s",err,100,"学生1")
  • 支持携带ctx的打印方法:
每次调用携带全局变量,支持log特殊需求,如链路追踪等     
默认支持两个特性:  //一次请求开始时写入   
ctx = context.WithValue(ctx, "logid", id)   //id类型string,通过id区分一次完整请求的所有日志      
ctx = context.WithValue(ctx, "start", time.Now())   //每条日志会计算出相对接口开始时间耗时     
  • 其他
日志支持接入网校链路追踪系统,使用参考example目录
4.生成error
调用:    
logger.NewError("error",SYSTEM_DEFAULT)
func NewError(err interface{}, ext ...XesError)       
//err传参支持string,error类型(会自动解析rpc server错误),表示错误根本原因    
//ext XesError,Xes错误码,对外输出错误信息,不传默认系统异常    
type XesError struct {        
    Code int    
    Msg  string    
} 
  • 其他参考
error_test.go
5.日志插件

​ 在我们其它的日志组件中,内部打印日志的方式为 logger.X 的方式,默认引入xesLogger日志库实例进行打印,若您的项目中采用其它的日志库,可以使用以下方式引入您的日志库。

  • 支持引入logrus实例

    //支持logrus日志库使用LoggerX接口格式打印日志 log为logrus全局实例
    	logger.AccessLogLib("logrus", log)
    
  • 支持引入zap实例

    //支持Zap日志库使用LoggerX接口格式打印日志 log为zap全局实例
    	logger.AccessLogLib("zap", log)
    
  • 若现有日志格式不符合预期

    参考builders目录下builder文件,实现打印日志接口中LoggerX与Build方法即可。
    
  • 使用参考

    日志支持接入其他日志库实例,请参考example目录 accessLogLibDemo.go中的demo
    
6.注意事项:
  • logger库是并发不安全的,所以全局只能有一个实例。在写单元测时,有可能会多次初始化,此时一定要在包测试完之后进行logger.Close()操作。否则可能会出现如下错误
   FileLogTraceWriter("/xxx/xxx.log"): Rotate: rename /xxx/xxx.log.1: no such file or dircotry\n
  • logger库初始化的时候会先进行一次关闭操作,如果在init方法中使用的logger日志打印,数据写入channel,main函数初始化时进行关闭channel操作时会造成panic。

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AccessLogLib

func AccessLogLib(libName string, args interface{})

func C

func C(tag string, args interface{}, v ...interface{})

CRITICAL level

func Close

func Close()

logger close

func D

func D(tag string, args interface{}, v ...interface{})

DEBUG level

func Dx

func Dx(ctx context.Context, tag string, args interface{}, v ...interface{})

DEBUG level with context

func E

func E(tag string, args interface{}, v ...interface{})

ERROR level

func Ex

func Ex(ctx context.Context, tag string, args interface{}, v ...interface{})

ERROR level with context

func F

func F(tag string, args interface{}, v ...interface{})

FATAL level

func I

func I(tag string, args interface{}, v ...interface{})

INFO level

func Id

func Id() int64

id generate

func InitLogWithConfig

func InitLogWithConfig(config *log4go.LogConfig)

自定义config Init

func InitLogger

func InitLogger(logpath string)

main函数调用 使用example.xml配置

func Ix

func Ix(ctx context.Context, tag string, args interface{}, v ...interface{})

INFO with context

func NewError

func NewError(err interface{}, ext ...XesError) *stackerr.StackErr

* NewError 构造错误 * err 如果err的类型是err或string,将错误信息写入ErrorMessage * 如果err是StackErr,直接返回 * ext ext[0]:错误XesError * ext ext[0]:错误code ext[1]:返回给调用端的错误信息

func NewErrorWithLevel

func NewErrorWithLevel(err interface{}, lvl int, ext ...XesError) *stackerr.StackErr

func NewLogConfig

func NewLogConfig() *log4go.LogConfig

使用自定义option

func RegisterPerfPlugin

func RegisterPerfPlugin(perfFunc plugin.PerfPlugin)

perf monitor

func SetBuilder

func SetBuilder(b MessageBuilder)

builder select

func T

func T(tag string, args interface{}, v ...interface{})

TRACE level

func Tx

func Tx(ctx context.Context, tag string, args interface{}, v ...interface{})

TRACE level with context

func W

func W(tag string, args interface{}, v ...interface{})

WARNING level

func Wx

func Wx(ctx context.Context, tag string, args interface{}, v ...interface{})

WARNING level with context

Types

type MessageBuilder

type MessageBuilder interface {
	//log build
	LoggerX(ctx context.Context, lvl string, tag string, args interface{}, v ...interface{})
	//log format
	Build(ctx context.Context, args interface{}, v ...interface{}) (position, message string)
}

builer interface

type XesError

type XesError struct {
	Code int
	Msg  string
}
var (
	//参数校验
	PARAM_MISSING     XesError = XesError{10001, "参数校验缺失"}
	PARAM_ERROR       XesError = XesError{10002, "参数校验错误"}
	PARAM_USER_MISSIG XesError = XesError{10101, "用户名缺失"}
	PARAM_USER_ERROR  XesError = XesError{10102, "用户名错误"}
	PARAM_MOBILEPHONE XesError = XesError{10200, "手机号错误"}
	PARAM_TELEPHONE   XesError = XesError{10300, "电话错误"}
	PARAM_EMAIL       XesError = XesError{10400, "邮箱错误"}

	//登录校验
	LOGIN_NOTLOGGEDIN         XesError = XesError{20000, "未登录"}
	LOGIN_SESSIONTIMEOUT      XesError = XesError{20100, "会话超时"}
	LOGIN_KICKED              XesError = XesError{20200, "已被踢"}
	LOGIN_PASSWORDMODIFIED    XesError = XesError{20300, "密码被修改"}
	LOGIN_NAMEMODIFIED        XesError = XesError{20400, "登录名被修改"}
	LOGIN_MOBILEPHONEMODIFIED XesError = XesError{20500, "手机号被修改"}

	//版本检测
	VERSION_NOTSUPPORT_CLOSE   XesError = XesError{30100, "版本不支持"}
	VERSION_NOTSUPPORT_RETURN  XesError = XesError{30200, "版本不支持"}
	VERSION_NOTSUPPORT_UPGRADE XesError = XesError{30300, "版本不支持"}

	//权限控制
	PERMISSION_VIEW   XesError = XesError{40100, "无权限查看"}
	PERMISSION_MODIFY XesError = XesError{40200, "无权限修改"}
	PERMISSION_ADD    XesError = XesError{40300, "无权限增加"}
	PERMISSION_DELETE XesError = XesError{40400, "无权限删除"}

	//系统异常
	SYSTEM_DEFAULT       XesError = XesError{50000, "系统异常"}
	SYSTEM_NOTSUPPORT    XesError = XesError{50100, "系统未支持"}
	SYSTEM_CONNECT_API   XesError = XesError{50201, "系统连接异常"}
	SYSTEM_CONNECT_MYSQL XesError = XesError{50202, "系统连接异常"}
	SYSTEM_CONNECT_REDIS XesError = XesError{50203, "系统连接异常"}
	SYSTEM_TIMEOUT_API   XesError = XesError{50401, "系统连接超时"}
	SYSTEM_TIMEOUT_MYSQL XesError = XesError{50402, "系统连接超时"}
	SYSTEM_TIMEOUT_REDIS XesError = XesError{50403, "系统连接超时"}
)

Directories

Path Synopsis
Package log4go provides level-based and highly configurable logging.
Package log4go provides level-based and highly configurable logging.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL