Skip to content

Commit 5117e67

Browse files
committed
added panic & panicf method
1 parent 2d96fae commit 5117e67

File tree

5 files changed

+97
-1
lines changed

5 files changed

+97
-1
lines changed

default.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44

55
package log
66

7-
import "os"
7+
import (
8+
"fmt"
9+
"os"
10+
)
811

912
var 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`
2439
func Error(v ...interface{}) {
2540
_ = stdLogger.Output(LevelError, 2, nil, v...)

default_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
}

log.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ type FmtFlag uint8
3838
// Log Level definition
3939
const (
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

log_test.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff 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+
294334
func cleaupFiles(match string) {
295335
pwd, _ := os.Getwd()
296336

receiver.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff 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`
170182
func (r *Receiver) Error(v ...interface{}) {
171183
_ = r.Output(LevelError, 2, nil, v...)

0 commit comments

Comments
 (0)