У меня есть примеры журналов, подобные этому, где uptime не всегда является полем:
Oct 17 08:41:33 host-name 2y40w: %SEC-6-IPACCESSLOGP: list 105 permitted tcp 1.2.3.4(17774) -> 0.0.0.0(22), 1 packet
Oct 17 13:32:26 host-name %SEC-6-IPACCESSLOGP: list 105 permitted tcp 1.2.3.4(56200) -> 0.0.0.0(22), 1 packet
Если я делаю регулярное выражение следующим образом:
%{SYSLOGTIMESTAMP:log_server_timestamp} %{IPORHOST:cisco_host (%{DATA:uptime}:)? %{NOTSPACE:msgid}: \list %{NUMBER:acl} %{WORD:action} %{WORD:protocol} %{NOTSPACE:source}+\(%{DATA:src_port}\) \-> %{NOTSPACE:dest}+\(%{DATA:dest_port}\), %{NUMBER:packets}
С пробелом между:
(%{DATA:uptime}:)? %{NOTSPACE:msgid}:
Он успешно проанализирует журнал, включающий время безотказной работы, но не журнал без времени безотказной работы.
Без пробела, подобного:
(%{DATA:uptime}:)?%{NOTSPACE:msgid}:
Он проанализирует сообщение о том, чтоне включает время работы.
Я немного устала от своего регулярного выражения, поэтому надеялась, что кто-нибудь может помочь мне понять, почему это не так, поскольку мне действительно не нравится идея добавления еще одного уровня вложенностиОператоры if, когда условное поле, подобное этому, должно быть доступно в регулярном выражении.
edit:
также пытается:
(?<uptime>[ywd0-9]+):
Что не работает либо