Skip to content

Commit 852255d

Browse files
committed
use ess as log pattern parser
1 parent 6dcda3b commit 852255d

File tree

8 files changed

+40
-78
lines changed

8 files changed

+40
-78
lines changed

console_receiver.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"runtime"
1212

1313
"aahframework.org/config.v0"
14+
"aahframework.org/essentials.v0-unstable"
1415
)
1516

1617
var (
@@ -34,7 +35,7 @@ var (
3435
type ConsoleReceiver struct {
3536
out io.Writer
3637
formatter string
37-
flags *[]FlagPart
38+
flags []ess.FmtFlagPart
3839
isCallerInfo bool
3940
isColor bool
4041
}
@@ -58,7 +59,7 @@ func (c *ConsoleReceiver) Init(cfg *config.Config) error {
5859

5960
// SetPattern method initializes the logger format pattern.
6061
func (c *ConsoleReceiver) SetPattern(pattern string) error {
61-
flags, err := parseFlag(pattern)
62+
flags, err := ess.ParseFmtFlag(pattern, FmtFlags)
6263
if err != nil {
6364
return err
6465
}

console_receiver_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ func TestConsoleLoggerUnknownFormatFlag(t *testing.T) {
6868
cfg, _ := config.ParseString(configStr)
6969
logger, err := New(cfg)
7070
assert.Nil(t, logger)
71-
assert.Equal(t, "unrecognized log format flag: myfile", err.Error())
71+
assert.Equal(t, "fmtflag: unknown flag 'myfile'", err.Error())
7272
}
7373

7474
func TestConsoleLoggerUnknownLevel(t *testing.T) {

entry.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,24 +57,24 @@ func (e *Entry) Reset() {
5757
// Unexported methods
5858
//___________________________________
5959

60-
// getEntry gets entry object from pool.
61-
func getEntry() *Entry {
60+
func acquireEntry() *Entry {
6261
return entryPool.Get().(*Entry)
6362
}
6463

65-
// putEntry reset the entry and puts it into Pool.
66-
func putEntry(e *Entry) {
67-
e.Reset()
68-
entryPool.Put(e)
64+
func releaseEntry(e *Entry) {
65+
if e != nil {
66+
e.Reset()
67+
entryPool.Put(e)
68+
}
6969
}
7070

71-
// getBuffer gets buffer object from pool.
72-
func getBuffer() *bytes.Buffer {
71+
func acquireBuffer() *bytes.Buffer {
7372
return bufPool.Get().(*bytes.Buffer)
7473
}
7574

76-
// putBuffer reset the buffer and puts it into Pool.
77-
func putBuffer(buf *bytes.Buffer) {
78-
buf.Reset()
79-
bufPool.Put(buf)
75+
func releaseBuffer(buf *bytes.Buffer) {
76+
if buf != nil {
77+
buf.Reset()
78+
bufPool.Put(buf)
79+
}
8080
}

file_receiver.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"time"
1414

1515
"aahframework.org/config.v0"
16-
"aahframework.org/essentials.v0"
16+
"aahframework.org/essentials.v0-unstable"
1717
)
1818

1919
var (
@@ -28,7 +28,7 @@ type FileReceiver struct {
2828
filename string
2929
out io.Writer
3030
formatter string
31-
flags *[]FlagPart
31+
flags []ess.FmtFlagPart
3232
isCallerInfo bool
3333
stats *receiverStats
3434
mu *sync.Mutex
@@ -78,7 +78,7 @@ func (f *FileReceiver) Init(cfg *config.Config) error {
7878

7979
// SetPattern method initializes the logger format pattern.
8080
func (f *FileReceiver) SetPattern(pattern string) error {
81-
flags, err := parseFlag(pattern)
81+
flags, err := ess.ParseFmtFlag(pattern, FmtFlags)
8282
if err != nil {
8383
return err
8484
}

file_receiver_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func TestFileLoggerUnknownFormatFlag(t *testing.T) {
113113
cfg, _ := config.ParseString(configStr)
114114
logger, err := New(cfg)
115115
assert.Nil(t, logger)
116-
assert.Equal(t, "unrecognized log format flag: myfile", err.Error())
116+
assert.Equal(t, "fmtflag: unknown flag 'myfile'", err.Error())
117117
}
118118

119119
func TestFileLoggerIncorrectSizeValue(t *testing.T) {

formatter.go

Lines changed: 11 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,13 @@ import (
88
"encoding/json"
99
"fmt"
1010
"path/filepath"
11-
"strings"
11+
12+
"aahframework.org/essentials.v0-unstable"
1213
)
1314

1415
// Format flags used to define log message format for each log entry
1516
const (
16-
FmtFlagLevel fmtFlag = iota
17+
FmtFlagLevel ess.FmtFlag = iota
1718
FmtFlagTime
1819
FmtFlagUTCTime
1920
FmtFlagLongfile
@@ -38,13 +39,10 @@ type (
3839
// Format: "2006-01-02 15:04:05.000",
3940
// }
4041
FlagPart struct {
41-
Flag fmtFlag
42+
Flag ess.FmtFlag
4243
Name string
4344
Format string
4445
}
45-
46-
// FmtFlag type definition
47-
fmtFlag uint8
4846
)
4947

5048
var (
@@ -64,7 +62,7 @@ var (
6462
// line - outputs file line number: L23
6563
// message - outputs given message along supplied arguments if they present
6664
// custom - outputs string as-is into log entry
67-
FmtFlags = map[string]fmtFlag{
65+
FmtFlags = map[string]ess.FmtFlag{
6866
"level": FmtFlagLevel,
6967
"time": FmtFlagTime,
7068
"utctime": FmtFlagUTCTime,
@@ -83,11 +81,11 @@ var (
8381
// textFormatter formats the `Entry` object details as per log `pattern`
8482
// For e.g.:
8583
// 2016-07-02 22:26:01.530 INFO formatter_test.go L29 - Yes, I would love to see
86-
func textFormatter(flags *[]FlagPart, entry *Entry) []byte {
87-
buf := getBuffer()
88-
defer putBuffer(buf)
84+
func textFormatter(flags []ess.FmtFlagPart, entry *Entry) []byte {
85+
buf := acquireBuffer()
86+
defer releaseBuffer(buf)
8987

90-
for _, part := range *flags {
88+
for _, part := range flags {
9189
switch part.Flag {
9290
case FmtFlagLevel:
9391
buf.WriteString(fmt.Sprintf(part.Format, levelToLevelName[entry.Level]))
@@ -101,7 +99,7 @@ func textFormatter(flags *[]FlagPart, entry *Entry) []byte {
10199
}
102100
buf.WriteString(fmt.Sprintf(part.Format, entry.File))
103101
case FmtFlagLine:
104-
buf.WriteString(fmt.Sprintf(part.Format, entry.Line))
102+
buf.WriteString("L" + fmt.Sprintf(part.Format, entry.Line))
105103
case FmtFlagMessage:
106104
buf.WriteString(entry.Message)
107105
case FmtFlagCustom:
@@ -127,47 +125,11 @@ func jsonFormatter(entry *Entry) ([]byte, error) {
127125
// Unexported methods
128126
//___________________________________
129127

130-
func applyFormatter(formatter string, flags *[]FlagPart, entry *Entry) []byte {
128+
func applyFormatter(formatter string, flags []ess.FmtFlagPart, entry *Entry) []byte {
131129
if formatter == textFmt {
132130
return textFormatter(flags, entry)
133131
}
134132

135133
lm, _ := jsonFormatter(entry)
136134
return lm
137135
}
138-
139-
// parseFlag it parses the log message formart into flag parts
140-
// For e.g.:
141-
// %time:2006-01-02 15:04:05.000 %level %custom:- %msg
142-
func parseFlag(format string) (*[]FlagPart, error) {
143-
var flagParts []FlagPart
144-
format = strings.TrimSpace(format)
145-
formatFlags := strings.Split(format, flagSeparator)[1:]
146-
for _, f := range formatFlags {
147-
parts := strings.SplitN(strings.TrimSpace(f), flagValueSeparator, 2)
148-
flag := fmtFlagByName(parts[0])
149-
if flag == FmtFlagUnknown {
150-
return nil, fmt.Errorf("unrecognized log format flag: %v", strings.TrimSpace(f))
151-
}
152-
153-
part := FlagPart{Flag: flag, Name: parts[0]}
154-
switch len(parts) {
155-
case 2:
156-
if flag == FmtFlagTime || flag == FmtFlagUTCTime ||
157-
flag == FmtFlagCustom {
158-
part.Format = parts[1]
159-
} else {
160-
part.Format = "%" + parts[1] + "v"
161-
}
162-
default:
163-
part.Format = defaultFormat
164-
if flag == FmtFlagLine {
165-
part.Format = "L" + defaultFormat
166-
}
167-
}
168-
169-
flagParts = append(flagParts, part)
170-
}
171-
172-
return &flagParts, nil
173-
}

log.go

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,7 @@ var (
5656
// ErrLogReceiverIsNil returned when suppiled receiver is nil.
5757
ErrLogReceiverIsNil = errors.New("log: receiver is nil")
5858

59-
flagSeparator = "%"
60-
flagValueSeparator = ":"
61-
defaultFormat = "%v"
62-
filePermission = os.FileMode(0755)
59+
filePermission = os.FileMode(0755)
6360

6461
// abstract it, can be unit tested
6562
exit = os.Exit
@@ -318,8 +315,8 @@ func (l *Logger) output(level level, calldepth int, format *string, v ...interfa
318315
return
319316
}
320317

321-
entry := getEntry()
322-
defer putEntry(entry)
318+
entry := acquireEntry()
319+
defer releaseEntry(entry)
323320
entry.Time = time.Now()
324321
entry.Level = level
325322
if format == nil {

util.go

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import (
88
"runtime"
99
"strings"
1010
"time"
11+
12+
"aahframework.org/essentials.v0-unstable"
1113
)
1214

1315
var (
@@ -44,16 +46,16 @@ func levelByName(name string) level {
4446
return LevelUnknown
4547
}
4648

47-
func fmtFlagByName(name string) fmtFlag {
49+
func fmtFlagByName(name string) ess.FmtFlag {
4850
if flag, ok := FmtFlags[name]; ok {
4951
return flag
5052
}
5153

5254
return FmtFlagUnknown
5355
}
5456

55-
func isFmtFlagExists(flags *[]FlagPart, flag fmtFlag) bool {
56-
for _, f := range *flags {
57+
func isFmtFlagExists(flags []ess.FmtFlagPart, flag ess.FmtFlag) bool {
58+
for _, f := range flags {
5759
if f.Flag == flag {
5860
return true
5961
}
@@ -71,7 +73,7 @@ func fetchCallerInfo(calldepth int) (string, int) {
7173
}
7274

7375
// isCallerInfo method to identify to fetch caller or not.
74-
func isCallerInfo(flags *[]FlagPart) bool {
76+
func isCallerInfo(flags []ess.FmtFlagPart) bool {
7577
return (isFmtFlagExists(flags, FmtFlagShortfile) ||
7678
isFmtFlagExists(flags, FmtFlagLongfile) ||
7779
isFmtFlagExists(flags, FmtFlagLine))

0 commit comments

Comments
 (0)