Я отправляю журналы Laravel с помощью модуля rsyslog imfile.
Я использую startmsg.regex для работы с многострочными сообщениями. Они прекрасно работают.
input(type="imfile"
File="laravel.log"
Tag="laravel_app"
startmsg.regex="[[:digit:]]{4}-[[:digit:]]{1,2}-[[:digit:]]{1,2} [[:digit:]]{1,2}:[[:digit:]]{1,2}:[[:digit:]]{1,2}"
)
Затем я отправляю журналы в Logstash (а затем использую их в Elasticsearch и Kibana)
Я отправляю журналы, используя шаблон Rsyslog
template(name="json-template"
type="list") {
constant(value="{")
constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339")
constant(value="\",\"@version\":\"1")
constant(value="\",\"message\":\"") property(name="msg" format="json")
constant(value="\",\"sysloghost\":\"") property(name="hostname")
constant(value="\",\"severity\":\"") property(name="syslogseverity-text")
constant(value="\",\"facility\":\"") property(name="syslogfacility-text")
constant(value="\",\"programname\":\"") property(name="programname")
constant(value="\",\"procid\":\"") property(name="procid")
constant(value="\"}\n")
}
Мои журналы выглядят так, где разрывы строк помечены \ n
[2018-06-07 11:02:33] testing.ERROR: класс 'App \ Http \ Controllers \ Deal'
не найдено {"исключение": "[объект]
(Symfony \ Component \ Debug \ Exception \ FatalThrowableError (код: 0): класс
'App \ Http \ Controllers \ Deal' не найден в
/app/Http/Controllers/TestingSyslogController.php:13)\n[stacktrace]\n#0
[внутренняя функция]:
App \ Http \ Контроллеры \ TestingSyslogController-> индекс () \ п # 1
/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54):
call_user_func_array (Array, Array) \ n # 2
/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45):
Осветить \ Routing \ Controller-> callAction ('index', Array) \ n # 3
/vendor/laravel/framework/src/Illuminate/Routing/Route.php(212):
Осветить \ Routing \ ControllerDispatcher-> отправка (Object (Illuminate \ Routing \ Route),
Объект (App \ Http \ Controllers \ TestingSyslogController), 'index') \ n # 4
/vendor/laravel/framework/src/Illuminate/Routing/Route.php(169):
Осветить \ Routing \ маршрутные> runController () \ п # 5
Таким образом, все сообщение в одной строке {message}
Как я могу использовать шаблон rsyslog, чтобы разбить сообщение в '\ n' на разные объекты, чтобы выглядеть примерно так ...
{строка сообщения 1}, {строка сообщения 2}, {строка сообщения x}