gitee.com/h79/goutils@v1.22.10/common/debug/debug.go (about)

     1  package debug
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"gitee.com/h79/goutils/common/config"
     7  	"gitee.com/h79/goutils/common/json"
     8  	"runtime/debug"
     9  	"strings"
    10  )
    11  
    12  type Debug struct {
    13  	Code   int32  `json:"code"`
    14  	Title  string `json:"title"`
    15  	Name   string `json:"name"`   //服务名称
    16  	Module string `json:"module"` //模板名
    17  	Detail string `json:"detail"` //简单描述
    18  	Stack  string `json:"stack"`  //调用堆栈
    19  	More   string `json:"more"`   //更多
    20  	Level  Level  `json:"level"`  //级别(严重程度)
    21  	ErrMsg string `json:"errMsg"`
    22  	err    error  `json:"-"`
    23  }
    24  
    25  type Level int32
    26  
    27  const (
    28  	DUnkLevel       = Level(0)
    29  	DNormalLevel    = Level(1)
    30  	DImportantLevel = Level(2)
    31  	DTightLevel     = Level(3) // 紧级
    32  	DFatalLevel     = Level(4) // 致命
    33  )
    34  
    35  func NewStack(code int32) *Debug {
    36  	return &Debug{
    37  		Code:  code,
    38  		Name:  config.AppName,
    39  		Stack: string(debug.Stack()),
    40  	}
    41  }
    42  
    43  func New(code int32) *Debug {
    44  	return &Debug{
    45  		Code: code,
    46  		Name: config.AppName,
    47  	}
    48  }
    49  
    50  func (d *Debug) String() string {
    51  	return json.ToString(d)
    52  }
    53  
    54  func (d *Debug) Error() error {
    55  	return d.newErr().err
    56  }
    57  
    58  func (d *Debug) newErr() *Debug {
    59  	if d.err == nil && len(d.ErrMsg) > 0 {
    60  		d.err = errors.New(d.ErrMsg)
    61  	}
    62  	return d
    63  }
    64  
    65  func (d *Debug) WithDetailFormat(format string, a ...interface{}) *Debug {
    66  	d.Detail = fmt.Sprintf(format, a...)
    67  	return d
    68  }
    69  
    70  func (d *Debug) WithDetail(detail string) *Debug {
    71  	d.Detail = detail
    72  	return d
    73  }
    74  
    75  func (d *Debug) WithError(er error) *Debug {
    76  	d.err = er
    77  	if er != nil {
    78  		d.ErrMsg = er.Error()
    79  	}
    80  	return d
    81  }
    82  
    83  func (d *Debug) WithErrMsg(er string) *Debug {
    84  	d.ErrMsg = er
    85  	return d.newErr()
    86  }
    87  
    88  func (d *Debug) WithName(name string) *Debug {
    89  	d.Name = name
    90  	return d
    91  }
    92  
    93  func (d *Debug) WithModule(module string) *Debug {
    94  	d.Module = module
    95  	return d
    96  }
    97  
    98  func (d *Debug) WithLevel(l Level) *Debug {
    99  	d.Level = l
   100  	return d
   101  }
   102  
   103  func (d *Debug) WithTitle(title string) *Debug {
   104  	d.Title = title
   105  	return d
   106  }
   107  
   108  func (d *Debug) WithStack() *Debug {
   109  	d.Stack = string(debug.Stack())
   110  	return d
   111  }
   112  
   113  func (d *Debug) WithMoreFormat(more string, a ...interface{}) *Debug {
   114  	d.More = fmt.Sprintf(more, a...)
   115  	return d
   116  }
   117  
   118  func (d *Debug) WithMore(more string) *Debug {
   119  	d.More = more
   120  	return d
   121  }
   122  
   123  func (d *Debug) MoreTo() string {
   124  	if len(d.Stack) == 0 {
   125  		return d.More
   126  	}
   127  	if len(d.More) == 0 {
   128  		return d.Stack
   129  	}
   130  	b := strings.Builder{}
   131  	b.WriteString(d.More)
   132  	b.WriteString("\r\n\r\nStack---------------\r\n")
   133  	b.WriteString(d.Stack)
   134  	return b.String()
   135  }