J'ai converti mes logs en JSON en production en utilisant lograge, cela facilite l'affichage sur plusieurs services de logs comme Amazon.Rails - Historique des erreurs en tant que JSON
config.lograge.enabled = true
config.lograge.formatter = Lograge::Formatters::Logstash.new
# add time to lograge
config.lograge.custom_options = lambda do |event|
params = event.payload[:params].reject { |k| %w(controller action).include?(k) }
{
time: event.time,
params: params
}
end
Cependant, en cas d'erreur la trace d'erreur est également connecté, mais pas en tant que JSON, au lieu comme une chaîne normale (et une ligne par entrée backtrace = _ =). Cela crée beaucoup de lignes non désirées (par exemple sur Amazon CloudWatch:)
F, [2016-11-12T18:08:09.774760 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] SomeModule::SomeError (error explanation):
18:08:09
F, [2016-11-12T18:08:09.774790 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9]
i-xxx
F, [2016-11-12T18:08:09.774790 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9]
18:08:09
F, [2016-11-12T18:08:09.774813 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:53:in `call'
i-xxxxx
F, [2016-11-12T18:08:09.774813 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:53:in `call'
18:08:09
F, [2016-11-12T18:08:09.774834 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:31:in `call'
i-xxxxx
F, [2016-11-12T18:08:09.774834 #15892] FATAL -- : [2f480b01-d8fa-459c-97dd-a904c98cfce9] actionpack (5.0.0.1) lib/some_module.rb:31:in `call'
Au lieu de cela, je voudrais condenser tout cela backtrace dans un seul journal JSON qui ressemblerait
{
error: 'SomeModule::SomeError (error explanation)',
backtrace: [
'some_gem (5.x) lib/some_module.rb:53:in `call',
'some_gem (5.x) lib/some_module.rb:31:in `call', ...]
}
Comment Je fais cela en plus de lograge json formatage pour les demandes sans erreurs?
Désolé l'exemple était réellement trompeur. J'attrape déjà des routes inégalées et elles ne provoquent plus d'exceptions dans mon application. Ma question concerne la gestion de toute erreur et pas seulement les erreurs de routage, je vais l'éditer pour choisir une autre erreur –
Je vois. Oui, lograge n'est pas pour la journalisation des erreurs d'application. Vous pouvez essayer le gem 'logstash-logger' pour enregistrer les événements qui ressemblent à ce que lograge met (si vous utilisez la mise en forme de l'événement logstash). – Alex