github.com/iikira/iikira-go-utils@v0.0.0-20230610031953-f2cb11cde33a/pcsverbose/pcsverbose.go (about)

     1  // Package pcsverbose 调试包
     2  package pcsverbose
     3  
     4  import (
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  )
     9  
    10  const (
    11  	// EnvVerbose 启用调试环境变量
    12  	EnvVerbose = "IIKIRA_GO_UTILS_VERBOSE"
    13  )
    14  
    15  var (
    16  	// IsVerbose 是否调试
    17  	IsVerbose = os.Getenv(EnvVerbose) == "1"
    18  
    19  	// Outputs 输出
    20  	Outputs = []io.Writer{os.Stderr}
    21  )
    22  
    23  // PCSVerbose 调试
    24  type PCSVerbose struct {
    25  	Module string
    26  }
    27  
    28  // New 根据module, 初始化PCSVerbose
    29  func New(module string) *PCSVerbose {
    30  	return &PCSVerbose{
    31  		Module: module,
    32  	}
    33  }
    34  
    35  // Info 提示
    36  func (pv *PCSVerbose) Info(l string) {
    37  	Verbosef("DEBUG: %s INFO: %s\n", pv.Module, l)
    38  }
    39  
    40  // Infof 提示, 格式输出
    41  func (pv *PCSVerbose) Infof(format string, a ...interface{}) {
    42  	Verbosef("DEBUG: %s INFO: %s", pv.Module, fmt.Sprintf(format, a...))
    43  }
    44  
    45  // Warn 警告
    46  func (pv *PCSVerbose) Warn(l string) {
    47  	Verbosef("DEBUG: %s WARN: %s\n", pv.Module, l)
    48  }
    49  
    50  // Warnf 警告, 格式输出
    51  func (pv *PCSVerbose) Warnf(format string, a ...interface{}) {
    52  	Verbosef("DEBUG: %s WARN: %s", pv.Module, fmt.Sprintf(format, a...))
    53  }
    54  
    55  // Verbosef 调试格式输出
    56  func Verbosef(format string, a ...interface{}) (n int, err error) {
    57  	if IsVerbose {
    58  		for _, Output := range Outputs {
    59  			n1, err := fmt.Fprintf(Output, TimePrefix()+" "+format, a...)
    60  			n += n1
    61  			if err != nil {
    62  				return n, err
    63  			}
    64  		}
    65  	}
    66  	return
    67  }
    68  
    69  // Verboseln 调试输出一行
    70  func Verboseln(a ...interface{}) (n int, err error) {
    71  	if IsVerbose {
    72  		for _, Output := range Outputs {
    73  			n1, err := fmt.Fprint(Output, TimePrefix()+" ")
    74  			n += n1
    75  			if err != nil {
    76  				return n, err
    77  			}
    78  			n2, err := fmt.Fprintln(Output, a...)
    79  			n += n2
    80  			if err != nil {
    81  				return n, err
    82  			}
    83  		}
    84  	}
    85  	return
    86  }