Skip to content

Commit 48ff28a

Browse files
committed
perf: reduces by 1 allocation moving the datetime string concatenation
1 parent dc9c445 commit 48ff28a

File tree

6 files changed

+28
-37
lines changed

6 files changed

+28
-37
lines changed

internal/services/datetime_printer.go

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@ type DateTimePrinter struct {
3232
unixOnce sync.Once
3333
}
3434

35-
// RetrieveDateTime returns the current date, time, and combined/unix string based on the configuration.
36-
// Returns: (dateString, timeString, combinedOrUnixString).
35+
// RetrieveDateTime returns the current date, time, and unix string based on the configuration.
36+
// Returns: (dateString, timeString, unixTimeStamp).
3737
// If the format is UnixTimestamp, the timestamp is returned as the third value, ignoring the boolean flags.
3838
// Otherwise, 'addDate' and 'addTime' control which components are generated.
3939
func (d *DateTimePrinter) RetrieveDateTime(addDate, addTime bool) (string, string, string) {
@@ -67,10 +67,6 @@ func (d *DateTimePrinter) RetrieveDateTime(addDate, addTime bool) (string, strin
6767
timeRes = d.currentTime.Load().(string)
6868
}
6969

70-
if addDate && addTime {
71-
return "", "", dateRes + " " + timeRes
72-
}
73-
7470
return dateRes, timeRes, ""
7571
}
7672

internal/services/json_marshaler.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func (j *JsonMarshaler) MarshalInto(buf *bytes.Buffer, logEntry JsonLogEntry) {
3131
buf.Grow(jsonCharOverhead + (averageExtraLen * extrasLen))
3232

3333
buf.WriteByte('{')
34-
j.writeLogEntryProperties(buf, logEntry.Level, logEntry.Date, logEntry.Time, logEntry.DateTime, logEntry.DateTimeFormat)
34+
j.writeLogEntryProperties(buf, logEntry.Level, logEntry.Date, logEntry.Time, logEntry.DateTimeFormat)
3535

3636
buf.WriteString("\"msg\":\"")
3737
buf.WriteString(logEntry.Message)
@@ -114,7 +114,6 @@ func (j *JsonMarshaler) writeLogEntryProperties(
114114
level string,
115115
date string,
116116
time string,
117-
dateTime string,
118117
dateTimeFormat s.DateTimeFormat,
119118
) {
120119
if level != "" {
@@ -124,14 +123,16 @@ func (j *JsonMarshaler) writeLogEntryProperties(
124123
buf.WriteByte(',')
125124
}
126125

127-
if dateTime != "" || (date != "" && time != "") {
126+
if date != "" && time != "" {
128127
if dateTimeFormat == s.UnixTimestamp {
129128
buf.WriteString("\"ts\":\"")
130129
} else {
131130
buf.WriteString("\"datetime\":\"")
132131
}
133132

134-
buf.WriteString(dateTime)
133+
buf.WriteString(date)
134+
buf.WriteByte(' ')
135+
buf.WriteString(time)
135136
buf.WriteByte('"')
136137
buf.WriteByte(',')
137138

internal/services/yaml_marshaler.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func (y *YamlMarshaler) MarshalInto(buf *bytes.Buffer, logEntry YamlLogEntry) {
3131
extrasLen := len(logEntry.Extras)
3232
buf.Grow(yamlCharOverhead + (averageExtraLen * extrasLen))
3333

34-
y.writeLogEntryProperties(buf, logEntry.Level, logEntry.Date, logEntry.Time, logEntry.DateTime, logEntry.DateTimeFormat)
34+
y.writeLogEntryProperties(buf, logEntry.Level, logEntry.Date, logEntry.Time, logEntry.DateTimeFormat)
3535

3636
buf.WriteString("msg: ")
3737
buf.WriteString(logEntry.Message)
@@ -109,7 +109,6 @@ func (y *YamlMarshaler) writeLogEntryProperties(
109109
level string,
110110
date string,
111111
time string,
112-
dateTime string,
113112
dateTimeFormat s.DateTimeFormat,
114113
) {
115114
if level != "" {
@@ -118,14 +117,16 @@ func (y *YamlMarshaler) writeLogEntryProperties(
118117
buf.WriteByte('\n')
119118
}
120119

121-
if dateTime != "" || (date != "" && time != "") {
120+
if date != "" && time != "" {
122121
if dateTimeFormat == s.UnixTimestamp {
123122
buf.WriteString("ts: ")
124123
} else {
125124
buf.WriteString("datetime: ")
126125
}
127126

128-
buf.WriteString(dateTime)
127+
buf.WriteString(date)
128+
buf.WriteByte(' ')
129+
buf.WriteString(time)
129130
buf.WriteByte('\n')
130131

131132
return

logs/encoders/default.go

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ func (d *DefaultEncoder) composeMsgInto(
9090
}
9191

9292
if isDateOrTimeEnabled {
93-
dateStr, timeStr, dateTimeStr := d.DateTimePrinter.RetrieveDateTime(dateEnabled, timeEnabled)
94-
d.addFormattedDateTime(buf, dateStr, timeStr, dateTimeStr)
93+
dateStr, timeStr, _ := d.DateTimePrinter.RetrieveDateTime(dateEnabled, timeEnabled)
94+
d.addFormattedDateTime(buf, dateStr, timeStr)
9595
}
9696

9797
if showLogLevel || isDateOrTimeEnabled {
@@ -106,25 +106,20 @@ func (d *DefaultEncoder) composeMsgInto(
106106
// addFormattedDateTime correctly formats the dateTime string, adding and removing square brackets
107107
// and white spaces as needed.
108108
// While formatting, it adds the dateTime string to the given buffer.
109-
func (d *DefaultEncoder) addFormattedDateTime(buf *bytes.Buffer, dateStr, timeStr, dateTimeStr string) {
110-
if dateStr == "" && timeStr == "" && dateTimeStr == "" {
109+
func (d *DefaultEncoder) addFormattedDateTime(buf *bytes.Buffer, dateStr, timeStr string) {
110+
if dateStr == "" && timeStr == "" {
111111
return
112112
}
113113

114114
buf.WriteByte('[')
115+
buf.WriteString(dateStr)
115116

116-
if dateTimeStr != "" {
117-
buf.WriteString(dateTimeStr)
118-
} else {
119-
buf.WriteString(dateStr)
120-
121-
if dateStr != "" && timeStr != "" {
122-
buf.WriteByte(' ')
123-
}
124-
125-
buf.WriteString(timeStr)
117+
if dateStr != "" && timeStr != "" {
118+
buf.WriteByte(' ')
126119
}
127120

121+
buf.WriteString(timeStr)
122+
128123
buf.WriteByte(']')
129124
}
130125

logs/encoders/json.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (j *JSONEncoder) composeMsgInto(
8484
extras ...any,
8585
) {
8686
buf.Grow((averageWordLen * len(extras)) + len(msg) + 60)
87-
dateStr, timeStr, dateTimeStr := j.DateTimePrinter.RetrieveDateTime(dateEnabled, timeEnabled)
87+
dateStr, timeStr, _ := j.DateTimePrinter.RetrieveDateTime(dateEnabled, timeEnabled)
8888

8989
if !showLogLevel {
9090
logLevel = ""
@@ -95,7 +95,6 @@ func (j *JSONEncoder) composeMsgInto(
9595
services.JsonLogEntry{
9696
Level: logLevel.String(),
9797
Date: dateStr,
98-
DateTime: dateTimeStr,
9998
Time: timeStr,
10099
DateTimeFormat: dateTimeFormat,
101100
Message: msg,

logs/encoders/yaml.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -93,13 +93,12 @@ func (y *YAMLEncoder) composeMsgInto(
9393
yamlMarshaler.MarshalInto(
9494
buf,
9595
services.YamlLogEntry{
96-
Level: logLevel.String(),
97-
Date: date,
98-
Time: time,
99-
DateTime: dateTime,
100-
DateTimeFormat: dateTimeFormat,
101-
Message: msg,
102-
Extras: extras,
96+
Level: logLevel.String(),
97+
Date: date,
98+
Time: time,
99+
DateTime: dateTime,
100+
Message: msg,
101+
Extras: extras,
103102
},
104103
)
105104
}

0 commit comments

Comments
 (0)