@@ -3,7 +3,6 @@ package format
33import (
44 "bufio"
55 "bytes"
6- "errors"
76 "strconv"
87
98 "gopkg.in/mcuadros/go-syslog.v2/internal/syslogparser/rfc3164"
@@ -31,33 +30,40 @@ const (
3130 detectedRFC6587 = iota
3231)
3332
34- func detect (data []byte ) (detected int , err error ) {
33+ /*
34+ * Will always fallback to rfc3164 (see section 4.3.3)
35+ */
36+ func detect (data []byte ) int {
3537 // all formats have a sapce somewhere
3638 if i := bytes .IndexByte (data , ' ' ); i > 0 {
3739 pLength := data [0 :i ]
3840 if _ , err := strconv .Atoi (string (pLength )); err == nil {
39- return detectedRFC6587 , nil
41+ return detectedRFC6587
42+ }
43+ // are we starting with <
44+ if data [0 ] != '<' {
45+ return detectedRFC3164
4046 }
41-
4247 // is there a close angle bracket before the ' '? there should be
4348 angle := bytes .IndexByte (data , '>' )
4449 if (angle < 0 ) || (angle >= i ) {
45- return detectedUnknown , errors . New ( "No close angle bracket before space" )
50+ return detectedRFC3164
4651 }
4752
4853 // if a single digit immediately follows the angle bracket, then a space
4954 // it is RFC5424, as RFC3164 must begin with a letter (month name)
5055 if (angle + 2 == i ) && (data [angle + 1 ] >= '0' ) && (data [angle + 1 ] <= '9' ) {
51- return detectedRFC5424 , nil
56+ return detectedRFC5424
5257 } else {
53- return detectedRFC3164 , nil
58+ return detectedRFC3164
5459 }
5560 }
56- return detectedUnknown , nil
61+ // fallback to rfc 3164 section 4.3.3
62+ return detectedRFC3164
5763}
5864
5965func (f * Automatic ) GetParser (line []byte ) LogParser {
60- switch format , _ := detect (line ); format {
66+ switch format := detect (line ); format {
6167 case detectedRFC3164 :
6268 return & parserWrapper {rfc3164 .NewParser (line )}
6369 case detectedRFC5424 :
@@ -82,7 +88,7 @@ func (f *Automatic) automaticScannerSplit(data []byte, atEOF bool) (advance int,
8288 return 0 , nil , nil
8389 }
8490
85- switch format , err := detect (data ); format {
91+ switch format := detect (data ); format {
8692 case detectedRFC6587 :
8793 return rfc6587ScannerSplit (data , atEOF )
8894 case detectedRFC3164 , detectedRFC5424 :
0 commit comments