Регулярное выражение для nxlog

У меня есть набор журналов, в которых нет фиксированного номера строки. Я пытаюсь получить эти журналы в Elasticsearch через nxlog.

     ------------------------------------------------------
    Timestamp: 2020-03-03 00:05:04Z|User -DEFAULT|Cart -DEFAULT|Source -mscorlib|Message -StartIndex cannot be less than zero
     ------------------------------------------------------
     ------------------------------------------------------    
    Timestamp: 2020-03-03 03:05:53Z|User -Simulate Pricing | Initiate | |Cart -|Level -INFO|Severity -Information|Class -SalesOrderClient.vb|Function - Simulate(testVal As Object) Method :| Cart_ID: 8092662

    Timestamp: 2020-03-03 00:00:30Z|User -|Cart -|Source -mscorlib|Message -Thread was being aborted.|StackTrace - at System.Threading.Thread.AbortInternal()
        at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout)
        at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout)
        at System.ServiceModel.Channels.HttpChannelFactory`1.HttpRequestChannel.HttpChannelRequest.SendRequest(Message message, TimeSpan timeout)
        at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message)
     ------------------------------------------------------
     ------------------------------------------------------

    Timestamp: 2020-03-03 00:18:57Z|User -DEFAULT|Cart -DEFAULT|Source -mscorlib|Message -StartIndex cannot be less than zero.

     ------------------------------------------------------

У этого есть несколько журналов с многострочными (без фиксированных строк) и несколько с одной строкой. Когда я пытаюсь получить эти данные с помощью nxlog, мой третий журнал разбивается на 4 разных строки для каждой новой строки.

Как я могу избежать этой проблемы. Какое регулярное выражение я могу здесь использовать? Я хочу, чтобы один полный журнал располагался в одной строке независимо от того, сколько строк там. Линии присутствуют в журналах.

Заранее спасибо.


person SPishere    schedule 04.03.2020    source источник


Ответы (1)


Используйте регулярное выражение для HeaderLine с модулем xm_multiline, который соответствует вашей отметке времени.
См. Примеры на https://nxlog.co/documentation/nxlog-user-guide/xm_multiline.html

person b0ti    schedule 04.03.2020
comment
Спасибо, да, я пробовал, за исключением того, что я не могу избежать тире (------------------------------ ------) в моих строках. Во всяком случае, чтобы этого избежать? - person SPishere; 05.03.2020
comment
Да, вы можете избавиться от этого, добавив в свой xm_multiline экземпляр: Exec if $raw_event =~ /^----/ drop(); - person b0ti; 06.03.2020
comment
Это приведет к удалению всего сообщения, так как оно состоит из нескольких строк, но это нормально. Спасибо! - person SPishere; 06.03.2020
comment
Нет, строка с тире удаляется только в том случае, если вы добавляете ее под xm_multiline. В руководстве пользователя есть аналогичный пример. Если вы хотите избавиться от дефисов и сохранить линию, вы также можете ее переписать. - person b0ti; 07.03.2020