@@ -19,6 +19,8 @@ import (
1919
2020const defaultTimestampFormat = time .RFC3339
2121
22+ var regex = regexp .MustCompile (`^\\[(.*?)\\]` )
23+
2224var (
2325 baseTimestamp time.Time = time .Now ()
2426 defaultColorScheme * ColorScheme = & ColorScheme {
@@ -263,17 +265,11 @@ func (f *TextFormatter) printColored(b *bytes.Buffer, entry *logrus.Entry, keys
263265 }
264266
265267 level := levelColor (fmt .Sprintf ("%5s" , levelText ))
266- prefix := ""
267- message := entry .Message
268268
269- if prefixValue , ok := entry .Data ["prefix" ]; ok {
270- prefix = colorScheme .PrefixColor (" " + prefixValue .(string ) + ":" )
271- } else {
272- prefixValue , trimmedMsg := extractPrefix (entry .Message )
273- if len (prefixValue ) > 0 {
274- prefix = colorScheme .PrefixColor (" " + prefixValue + ":" )
275- message = trimmedMsg
276- }
269+ prefix := ""
270+ prefixValue , message := getPrefixAndMessage (entry )
271+ if len (prefixValue ) > 0 {
272+ prefix = colorScheme .PrefixColor (" " + prefixValue + ":" )
277273 }
278274
279275 messageFormat := "%s"
@@ -293,7 +289,7 @@ func (f *TextFormatter) printColored(b *bytes.Buffer, entry *logrus.Entry, keys
293289 _ , err = fmt .Fprintf (b , "%s %s%s " + messageFormat , colorScheme .TimestampColor (timestamp ), level , prefix , message )
294290 }
295291 for _ , k := range keys {
296- if k != "prefix " {
292+ if k != "package " {
297293 v := entry .Data [k ]
298294
299295 format := "%+v"
@@ -333,9 +329,39 @@ func (f *TextFormatter) needsQuoting(text string) bool {
333329 return false
334330}
335331
332+ // getPrefixAndMessage extracts the prefix and the message from the entry by the following order:
333+ // 1. If the "prefix" field is set in entry.Data, use that as prefix.
334+ // 2. If the "package" field is set in entry.Data, use that to determine the prefix.
335+ // If a replacement is found in prefixReplacements, use that. Otherwise, use the package name.
336+ // 3. Try to extract the prefix from the message itself by looking for a pattern like "[prefix] message".
337+ // 4. If none of the above methods yield a prefix, return an empty prefix and the original message.
338+ func getPrefixAndMessage (entry * logrus.Entry ) (string , string ) {
339+ prefix := ""
340+ msg := entry .Message
341+
342+ if prefixOldMethod , ok := entry .Data ["prefix" ]; ok {
343+ return prefixOldMethod .(string ), msg
344+ }
345+
346+ if packagePath , ok := entry .Data ["package" ]; ok {
347+ if prefixReplacement , ok := prefixReplacements [packagePath .(string )]; ok {
348+ return prefixReplacement , msg
349+ }
350+ pathSplit := strings .Split (packagePath .(string ), "/" )
351+ prefix = pathSplit [len (pathSplit )- 1 ]
352+ return prefix , msg
353+ }
354+
355+ if prefixExtracted , trimmedMsg := extractPrefix (msg ); len (prefixExtracted ) > 0 {
356+ return prefixExtracted , trimmedMsg
357+ }
358+
359+ return "" , msg
360+ }
361+
336362func extractPrefix (msg string ) (string , string ) {
337363 prefix := ""
338- regex := regexp . MustCompile ( `^\\[(.*?)\\]` )
364+
339365 if regex .MatchString (msg ) {
340366 match := regex .FindString (msg )
341367 prefix , msg = match [1 :len (match )- 1 ], strings .TrimSpace (msg [len (match ):])
0 commit comments