File tree Expand file tree Collapse file tree 5 files changed +97
-1
lines changed Expand file tree Collapse file tree 5 files changed +97
-1
lines changed Original file line number Diff line number Diff line change 44
55package log
66
7- import "os"
7+ import (
8+ "fmt"
9+ "os"
10+ )
811
912var stdLogger Logger
1013
@@ -20,6 +23,18 @@ func Fatalf(format string, v ...interface{}) {
2023 os .Exit (1 )
2124}
2225
26+ // Panic logs message as `PANIC` and calls panic()
27+ func Panic (v ... interface {}) {
28+ _ = stdLogger .Output (levelPanic , 2 , nil , v ... )
29+ panic ("" )
30+ }
31+
32+ // Panicf logs message as `PANIC` and calls panic()
33+ func Panicf (format string , v ... interface {}) {
34+ _ = stdLogger .Output (levelPanic , 2 , & format , v ... )
35+ panic (fmt .Sprintf (format , v ... ))
36+ }
37+
2338// Error logs message as `LevelError`
2439func Error (v ... interface {}) {
2540 _ = stdLogger .Output (LevelError , 2 , nil , v ... )
Original file line number Diff line number Diff line change @@ -40,3 +40,25 @@ func TestDefaultStandardLogger(t *testing.T) {
4040 SetOutput (newLogger )
4141 Info ("Fresh new face ..." )
4242}
43+
44+ func TestPanicDefaultStandardLogger (t * testing.T ) {
45+ defer func () {
46+ if r := recover (); r != nil {
47+ _ = r
48+ }
49+ }()
50+
51+ SetLevel (levelPanic )
52+ Panic ("This is panic message" )
53+ }
54+
55+ func TestPanicfDefaultStandardLogger (t * testing.T ) {
56+ defer func () {
57+ if r := recover (); r != nil {
58+ _ = r
59+ }
60+ }()
61+
62+ SetLevel (levelPanic )
63+ Panicf ("This is panic %v" , "message from param" )
64+ }
Original file line number Diff line number Diff line change @@ -38,6 +38,7 @@ type FmtFlag uint8
3838// Log Level definition
3939const (
4040 levelFatal Level = iota
41+ levelPanic
4142 LevelError
4243 LevelWarn
4344 LevelInfo
@@ -105,6 +106,7 @@ var (
105106
106107 levelNameToLevel = map [string ]Level {
107108 "FATAL" : levelFatal ,
109+ "PANIC" : levelPanic ,
108110 "ERROR" : LevelError ,
109111 "WARN" : LevelWarn ,
110112 "INFO" : LevelInfo ,
@@ -114,6 +116,7 @@ var (
114116
115117 levelToLevelName = map [Level ]string {
116118 levelFatal : "FATAL" ,
119+ levelPanic : "PANIC" ,
117120 LevelError : "ERROR" ,
118121 LevelWarn : "WARN" ,
119122 LevelInfo : "INFO" ,
@@ -125,6 +128,7 @@ var (
125128 resetColor = []byte ("\033 [0m" )
126129 levelToColor = [][]byte {
127130 levelFatal : []byte ("\033 [0;31m" ), // red
131+ levelPanic : []byte ("\033 [0;31m" ), // red
128132 LevelError : []byte ("\033 [0;31m" ), // red
129133 LevelWarn : []byte ("\033 [0;33m" ), // yellow
130134 LevelInfo : []byte ("\033 [0;37m" ), // white
@@ -170,6 +174,9 @@ type Logger interface {
170174 Fatal (v ... interface {})
171175 Fatalf (format string , v ... interface {})
172176
177+ Panic (v ... interface {})
178+ Panicf (format string , v ... interface {})
179+
173180 Error (v ... interface {})
174181 Errorf (format string , v ... interface {})
175182
Original file line number Diff line number Diff line change @@ -291,6 +291,46 @@ func TestStats(t *testing.T) {
291291 assert .Equal (t , int64 (200 ), stats .Lines ())
292292}
293293
294+ func TestPanicCustomConsoleReceiver (t * testing.T ) {
295+ config := `
296+ # console logger configuration
297+ # "CONSOLE" uppercasse works too
298+ receiver = "CONSOLE"
299+
300+ level = "panic"
301+ `
302+ defer func () {
303+ if r := recover (); r != nil {
304+ _ = r
305+ }
306+ }()
307+
308+ logger , err := New (config )
309+ assert .FailNowOnError (t , err , "unexpected error" )
310+
311+ logger .Panic ("This is panic message" )
312+ }
313+
314+ func TestPanicfCustomConsoleReceiver (t * testing.T ) {
315+ config := `
316+ # console logger configuration
317+ # "CONSOLE" uppercasse works too
318+ receiver = "CONSOLE"
319+
320+ level = "panic"
321+ `
322+ defer func () {
323+ if r := recover (); r != nil {
324+ _ = r
325+ }
326+ }()
327+
328+ logger , err := New (config )
329+ assert .FailNowOnError (t , err , "unexpected error" )
330+
331+ logger .Panicf ("This is panic %v" , "message from param" )
332+ }
333+
294334func cleaupFiles (match string ) {
295335 pwd , _ := os .Getwd ()
296336
Original file line number Diff line number Diff line change @@ -166,6 +166,18 @@ func (r *Receiver) Fatalf(format string, v ...interface{}) {
166166 os .Exit (1 )
167167}
168168
169+ // Panic logs message as `PANIC` and calls panic()
170+ func (r * Receiver ) Panic (v ... interface {}) {
171+ _ = r .Output (levelPanic , 2 , nil , v ... )
172+ panic ("" )
173+ }
174+
175+ // Panicf logs message as `PANIC` and calls panic()
176+ func (r * Receiver ) Panicf (format string , v ... interface {}) {
177+ _ = r .Output (levelPanic , 2 , & format , v ... )
178+ panic (fmt .Sprintf (format , v ... ))
179+ }
180+
169181// Error logs message as `LevelError`
170182func (r * Receiver ) Error (v ... interface {}) {
171183 _ = r .Output (LevelError , 2 , nil , v ... )
You can’t perform that action at this time.
0 commit comments