Спецификаторы значений

Отображения в спецификации формата назначают значения атрибутам.

Часть отображения спецификации формата состоит из следующих типов спецификаторов значений:

  • $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."