Как подавить печать имен исключений и их отслеживание в приложении Ruby / RoR? - PullRequest
0 голосов
/ 03 июля 2019

Мне нужны журналы вывода приложений Ruby on Rails только в формате JSON, поэтому они пригодны для использования большинством инструментов обработки журналов. Я использую Lograge для этого. Однако, когда возникает исключение, отображается не только логин JSON, но также имя исключения и его обратный след. Это нарушает разбор JSON.

Пример вывода:

{"method":"GET","path":"/raise_exception_path","format":"html","controller":"ApplicationController","action":"raise_exception_path","status":500,"error":"RuntimeError: exception is raised error","duration":46.0,"view":0.37,"db":0.0,"exception":["RuntimeError","exception is raised"],"exception_object":"exception is raised ","@timestamp":"2019-07-03T08:18:16.979Z","@version":"1","message":"[500] GET /version (ApplicationController#version)"}

RuntimeError (exception is raised):

app/controllers/application_controller.rb:6:in `version'

Я пробовал глушители / фильтры журналов Rails, но они имели дело только с обратным следом, а не с самим именем исключения. Строка RuntimeError (exception is raised): все еще выводится на консоль.

Кроме того, я подумал, что может быть достаточно просто перенаправить STDERR на /dev/null, но, очевидно, эти исключения и их обратная трассировка печатаются в STDOUT.

Конфигурация моего приложения:

    config.logger = ActiveSupport::Logger.new(STDOUT)
    config.lograge.enabled = true
    config.lograge.base_controller_class = 'ActionController::API'
    config.lograge.formatter = Lograge::Formatters::Logstash.new

    config.lograge.custom_options = lambda do |event|
      {
        exception: event.payload[:exception], # ["ExceptionClass", "the message"]
        exception_object: event.payload[:exception_object] # the exception instance
      }
    end
    $stderr.reopen("/dev/null", "w")

Ожидаемым результатом будет то, что на производстве у меня есть поток только для JSON logline, идеально напечатанных в STDOUT, без каких-либо исключений или следов стека.

{"method":"GET","path":"/","format":"html","controller":"TimezoneController","action":"timezone","status":200,"duration":11.56,"view":2.0,"db":0.0,"exception":null,"exception_object":null,"@timestamp":"2019-07-03T08:18:13.954Z","@version":"1","message":"[200] GET / (TimezoneController#timezone)"}
{"method":"GET","path":"/version","format":"html","controller":"ApplicationController","action":"version","status":500,"error":"RuntimeError: earth is flat error","duration":46.0,"view":0.37,"db":0.0,"exception":["RuntimeError","earth is flat error"],"exception_object":"earth is flat error","@timestamp":"2019-07-03T08:18:16.979Z","@version":"1","message":"[500] GET /version (ApplicationController#version)"}
{"method":"GET","path":"/","format":"html","controller":"TimezoneController","action":"timezone","status":200,"duration":11.56,"view":2.0,"db":0.0,"exception":null,"exception_object":null,"@timestamp":"2019-07-03T08:18:13.954Z","@version":"1","message":"[200] GET / (TimezoneController#timezone)"}
{"method":"GET","path":"/version","format":"html","controller":"ApplicationController","action":"version","status":500,"error":"RuntimeError: earth is flat error","duration":46.0,"view":0.37,"db":0.0,"exception":["RuntimeError","earth is flat error"],"exception_object":"earth is flat error","@timestamp":"2019-07-03T08:18:16.979Z","@version":"1","message":"[500] GET /version (ApplicationController#version)"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...