summaryrefslogtreecommitdiffstats
path: root/doc/expression.html
blob: 6d18741381d541a13e0ec119d1f6026981f7a0a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<meta http-equiv="Content-Language" content="en"><title>Expressions</title></head>
<body>
<h1>Expressions</h1>
<p>Rsyslog supports expressions at a growing number of places. So
far, they are supported for filtering messages.</p><p>C-like comments (/* some comment */) are supported <span style="font-weight: bold;">inside</span> the expression, but not yet in the rest of the configuration file.</p>
<p></p>
<h2>Formal Definition</h2>

<p>Below is the formal definition of expression format (in ABNF, RFC 2234):<br>
</p><pre>; The stuff immediately below here is a quick shot at how the config<br>; file ABNF *at whole* may look like. That is not really related to<br>; expressions, but for the time being I put it here. It will later be<br>; moved to a more appropriate place. -- rgerhards, 2008-02-22<br>?line?   := cfsysline / cfli<br>cfsysline:= BOL "$" *char EOL ; how to handle the first line? (no EOL in front!)<br>BOL      := ; Begin of Line - implicitely set on file beginning and after each EOL<br>EOL       := 0x0a ;LF<br>if_stmt  := "if" expr "then"<br>old_filter:= BOL facility "." severity ; no whitespace allowed between BOL and facility!<br>facility := "*" / "auth" / "authpriv" / "cron" / "daemon" / "kern" / "lpr" / <br>            "mail" / "mark" / "news" / "security" / "syslog" / "user" / "uucp" / <br>            "local0" .. "local7" / "mark"<br>	   ; The keyword security should not be used anymore<br>	   ; mark is just internal<br>severity := TBD ; not really relevant in this context<br><br>; and now the actual expression<br>expr     := e_and *("or" e_and)<br>e_and    := e_cmp *("and" e_cmp)<br>e_cmp    := val 0*1(cmp_op val)<br>val      := term *(("+" / "-") term)<br>term     := factor *(("*" / "/" / "%") factor)<br>factor   := ["not"] ["-"] terminal<br>terminal := var / constant / function / ( "(" expr ")" )<br>function := name "(" *("," expr) ")"<br>var      := "$" varname<br>varname  := msgvar / sysvar<br>msgvar   := name<br>sysvar   := "$" name<br>name     := alpha *(alnum)<br>constant := string / number<br>string   := simpstr / tplstr ; tplstr will be implemented in next phase<br>simpstr  := "'" *char "'"    ; use your imagination for char ;)<br>tplstr   := '"' template '"' ; not initially implemented<br>number   := ["-"] 1*digit ; 0nn = octal, 0xnn = hex, nn = decimal<br>cmp_op   := "==" / "!=" / "&lt;&gt;" / "&lt;" / "&gt;" / "&lt;=" / "&gt;=" / "contains" / "startswith"<br>digit    := %x30-39<br>alpha    := "a" ... "z" # all letters<br>alnum    :* alpha / digit / "_"<br></pre>
<p>[<a href="rsyslog_conf.html">rsyslog.conf overview</a>]
[<a href="manual.html">manual index</a>] [<a href="http://www.rsyslog.com/">rsyslog site</a>]</p>
<p><font size="2">This documentation is part of the
<a href="http://www.rsyslog.com/">rsyslog</a>
project.<br>
Copyright © 2008 by <a href="http://www.gerhards.net/rainer">Rainer
Gerhards</a> and
<a href="http://www.adiscon.com/">Adiscon</a>.
Released under the GNU GPL version 3 or higher.</font></p>
</body></html>