SysLog协议解析

版本

SysLog协议规范可以参考RFC文档(RFC5424,取代了RFC3164)
对于RFC3164,SysLog报文格式相对简单,形式如下

<PRIVAL> HEADER MSG

对于RFC5424,SysLog形式复杂了许多,这里贴ABNF表达式,自行体会

SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]
HEADER = PRI VERSION SP TIMESTAMP SP HOSTNAME
SP APP-NAME SP PROCID SP MSGID
PRI = "<" PRIVAL ">"
PRIVAL = 13DIGIT ; range 0 .. 191
VERSION = NONZERO-DIGIT 0
2DIGIT
HOSTNAME = NILVALUE / 1255PRINTUSASCII
APP-NAME = NILVALUE / 1
48PRINTUSASCII
PROCID = NILVALUE / 1128PRINTUSASCII
MSGID = NILVALUE / 1
32PRINTUSASCII
TIMESTAMP = NILVALUE / FULL-DATE "T" FULL-TIME
FULL-DATE = DATE-FULLYEAR "-" DATE-MONTH "-" DATE-MDAY
DATE-FULLYEAR = 4DIGIT
DATE-MONTH = 2DIGIT ; 01-12
DATE-MDAY = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on
; month/year
FULL-TIME = PARTIAL-TIME TIME-OFFSET
PARTIAL-TIME = TIME-HOUR ":" TIME-MINUTE ":" TIME-SECOND
[TIME-SECFRAC]
TIME-HOUR = 2DIGIT ; 00-23
TIME-MINUTE = 2DIGIT ; 00-59
TIME-SECOND = 2DIGIT ; 00-59
TIME-SECFRAC = "." 16DIGIT
TIME-OFFSET = "Z" / TIME-NUMOFFSET
TIME-NUMOFFSET = ("+" / "-") TIME-HOUR ":" TIME-MINUTE
STRUCTURED-DATA = NILVALUE / 1
SD-ELEMENT
SD-ELEMENT = "[" SD-ID (SP SD-PARAM) "]"
SD-PARAM = PARAM-NAME "=" %d34 PARAM-VALUE %d34
SD-ID = SD-NAME
PARAM-NAME = SD-NAME
PARAM-VALUE = UTF-8-STRING ; characters '"', '' and
; ']' MUST be escaped.
SD-NAME = 1
32PRINTUSASCII
; except '=', SP, ']', %d34 (")
MSG = MSG-ANY / MSG-UTF8
MSG-ANY = *OCTET ; not starting with BOM
MSG-UTF8 = BOM UTF-8-STRING
BOM = %xEF.BB.BF
UTF-8-STRING = *OCTET ; UTF-8 string as specified
; in RFC 3629
OCTET = %d00-255
SP = %d32
PRINTUSASCII = %d33-126
NONZERO-DIGIT = %d49-57
DIGIT = %d48 / NONZERO-DIGIT
NILVALUE = "-"

其中 PRIVAL = Facility << 3 + Severity
Facility 取值0-23
Severity 取值0-7
PRIVAL 取值 0-191

posted on 2016-04-08 22:43  图图图图  阅读(1481)  评论(0)    收藏  举报