github.com/keysonZZZ/kmg@v0.0.0-20151121023212-05317bfd7d39/kmgErr/error.go (about)

     1  package kmgErr
     2  
     3  import (
     4  	"fmt"
     5  	"runtime/debug"
     6  	"time"
     7  
     8  	"github.com/bronze1man/kmg/kmgDebug"
     9  	"github.com/bronze1man/kmg/kmgLog"
    10  )
    11  
    12  // useful in test
    13  func PanicIfError(err error) {
    14  	if err != nil {
    15  		panic(err)
    16  	}
    17  }
    18  
    19  func LogErrorWithStack(err error) {
    20  	if err == nil {
    21  		return
    22  	}
    23  	s := ""
    24  	if err != nil {
    25  		s = err.Error()
    26  	}
    27  	kmgLog.Log("error", s, kmgDebug.GetCurrentStack(1))
    28  }
    29  
    30  func LogUserErrorWithStack(err error) {
    31  	if err == nil {
    32  		return
    33  	}
    34  	s := ""
    35  	if err != nil {
    36  		s = err.Error()
    37  	}
    38  	kmgLog.Log("userError", s, kmgDebug.GetCurrentStack(1))
    39  }
    40  
    41  func LogError(err error) {
    42  	s := ""
    43  	if err != nil {
    44  		s = err.Error()
    45  	}
    46  	kmgLog.Log("error", s)
    47  }
    48  
    49  var PrintStack = debug.PrintStack
    50  
    51  type PanicErr struct {
    52  	PanicObj interface{}
    53  }
    54  
    55  func (e *PanicErr) Error() string {
    56  	return fmt.Sprintf("%#v", e.PanicObj)
    57  }
    58  
    59  // 把panic转换成err返回,
    60  // 没有panic时,返回nil
    61  // panic(nil)会导致返回nil(没有错误)(这个目前没有找到靠谱的方法解决)
    62  func PanicToError(f func()) (err error) {
    63  	defer func() {
    64  		out := recover()
    65  		if out == nil {
    66  			return
    67  		}
    68  		err1, ok := out.(error)
    69  		if ok {
    70  			err = err1
    71  			return
    72  		}
    73  		err = &PanicErr{PanicObj: out}
    74  	}()
    75  	f()
    76  	return nil
    77  }
    78  
    79  func PanicToErrorAndLog(f func()) (err error) {
    80  	defer func() {
    81  		out := recover()
    82  		if out == nil {
    83  			err = nil
    84  			return
    85  		}
    86  
    87  		err1, ok := out.(error)
    88  		if ok {
    89  			err = err1
    90  			LogErrorWithStack(err)
    91  			return
    92  		}
    93  		err = &PanicErr{PanicObj: out}
    94  		LogErrorWithStack(err)
    95  	}()
    96  	f()
    97  	return nil
    98  }
    99  
   100  // 要求这个函数在规定的时间内完成
   101  // 要么在这个时间范围内完成,要么返回错误
   102  // 会在新线程中执行函数
   103  //
   104  func ErrInTime(dur time.Duration, f func()) (err error) {
   105  	return nil
   106  }
   107  
   108  func Client(reason string, http_code int) {
   109  
   110  }