Спецификаторы значений
Отображения в спецификации формата назначают значения атрибутам.
Часть отображения спецификации формата состоит из следующих типов спецификаторов значений:
$i- Строковая константа
- Оператор PRINTF
$i-
iуказывает на положение подвыражения в строке формата. Все подвыражения нумеруются, начиная с 1, до максимального номера подвыражения в строке формата.Значение спецификатора значений
$i(его могут называть также переменной, слотом или атрибутом) - это часть сообщения системного журнала, сопоставляемая с соответствующим подвыражением.В следующем примере агент журнала переводит любое сообщение журнала из формата syslog UNIX в событие syslog вместе с назначенными значениями:
REGEX REGenericSyslog ^([A-Z][a-z]{2}) ([ 0-9][0-9]) ([0-9]{2}:[0-9]{2}:[0-9]{2}) (.*?) (.*?): (.*)$ month $1 date $2 time $3 host $4 service $5 msg $6 ENDКаждое из подвыражений, проперечисляемых от
$1до$6, соответствует элементу в скобках в регулярном выражении.Поэтому следующему событию syslog:
Apr 6 10:03:20 jimmy syslogd 1.4.1: restart.назначаются следующие значения:
month=Apr date=6 time=10:03:20 host=jimmy service=syslogd 1.4.1 msg=restart.Например, в событии syslog значение
10:03:20соответствует третьему элементу в скобках в регулярном выражении, поэтому это значение присваивается значению времени $3. Аналогично, значениеjimmyсоответствует четвертому элементу в скобках в регулярном выражении, поэтому это значение присваивается значению хоста $4. - строковая константа
-
Строковая константа объявляет, что значение атрибута - это заданная строка. Если значение атрибута - это одна константа без пробелов, ее задают без окружающих двойных кавычек (" "), как показано в следующем примере:
severity WARNINGВ противном случае, если пробелы в значении атрибута существуют, надо использовать двойные кавычки, как показано в следующем примере:
component "Web Server" - Оператор PRINTF
-
Оператор PRINTF создает дополнительные значения сложного атрибута из других его значений. Оператор PRINTF состоит из ключевого слова PRINTF с последующей строкой в формате C-style printf() и одним или несколькими именами атрибута.
Строка формата поддерживает только спецификатор компонентов
%s. Значения используемых в операторе PRINTF атрибутов должны получаться или из спецификации значений $i, или из спецификации значений строки константы (их нельзя получать из другого оператора PRINTF).Используйте значение атрибутов аргументов, чтобы составить новую строковую константу в соответствии со строкой формата. Эта новая строковая константа становится значением атрибута.
На основании предыдущего примера, где был определен базовый класс
REGenericSyslog, а также слоты service и msg , можно определить атрибут с названием syslog_msg, используя ключевое слово PRINTF.
Если в журнале есть следующее сообщение:syslog_msg PRINTF("service %s reports %s", service, msg)Apr 6 10:03:20 jimmy syslogd 1.4.1: restart.Составляется новая строковая константа, содержащая значения атрибутов из строки формата:
syslog_msg="service syslogd 1.4.1 reports restart."