grammar_whitespace_mode = 'explicit'
class YYYYMMDD(Grammar):
#date
grammar = (WORD('[0-9]', min=4, max=4), L('-'), WORD('[0-9]', min=2, max=2), L('-'),
WORD('[0-9]', min=2, max=2))
class HHMMSSsss(Grammar):
#time
grammar = (WORD('[0-9]', min=2, max=2), L(':'), WORD('[0-9]', min=2, max=2), L(':'),
WORD('[0-9]', min=2, max=2), L(','), WORD('[0-9]', min=1, max=3))
class LogDate(Grammar):
# YYYY-MM-DD ' ' HH:MM:SS.sss
grammar = (YYYYMMDD, L(' '), HHMMSSsss)
class LogMDC(Grammar):
#key:value
grammar = (WORD('a-zA-Z0-9_\-'), L(':'), REPEAT(ANY, min=0, greedy=False))
class LogNDC(Grammar):
grammar = (REPEAT(ANY_EXCEPT(' '), min=1))
class LogLevel(Grammar):
grammar = (L('FATAL') | L('ERROR') | L('WARN') | L('INFO') | L('DEBUG') | L('TRACE'))
class LogCategory(Grammar):
grammar = (WORD('[a-zA-Z0-9_\-\.]', min=1))
class LogLineNumber(Grammar):
grammar = (WORD('[0-9]', min=1))
class Unknow(Grammar):
grammar = (REPEAT(ANY, sep=EOL, min=1, greedy=False))
# there are some other grammars to match know information format
class LogLine(Grammar):
grammar = (BOL, LogDate, L(' ('), REPEAT(LogMDC, min=0, sep=" "), REPEAT(LogNDC, min=0, sep=" "), L(') '), LogLevel,
L(' '), LogCategory, L(':'), LogLineNumber, L(' - '), Unknow, EOL)
class LogFile(Grammar):
grammar = REPEAT(LogLine)