Protokollausgabe im Json-Format mit lograge / lograge-sql mit RubyOnRails

Über lograge / lograge-sql

Lograge / lograge-sql kann verwendet werden, um Rails-Protokolle und mehrzeilige Protokolle wie z. B. Ausführungs-SQL in einem Format wie Json auszugeben, damit die Protokolle leicht lesbar sind.

lograge lograge ist ein Juwel, das eine einzelne Protokollzeile (Beispiel: json) ausgeben kann, indem nur die erforderlichen Informationen für das mehrzeilige Protokoll des grundlegenden Loggers von Rails verwendet werden. https://github.com/roidrage/lograge

lograge


{"method":"GET","path":"/xxxxx","format":"html","controller":"Test::TestController","action":"index","status":200,"duration":109.04,"view":80.24,"db":0.0,"params":{},"headers":"#<ActionDispatch::Http::Headers:0x00007faac342cd70>","view_runtime":80.24499999919499,"db_runtime":0,"custom_payload":{"timestamp":"2020-06-17 08:43:23 +0900","request_id":"25e160cb-1dcb-4b19-8eb2-9253f35b4f93","remote_ip":"127.0.0.1"},"operator_name":"Tester","email":"[email protected]","timestamp":"2020-06-17 08:43:23 +0900","request_id":"25e160cb-1dcb-4b19-8eb2-9253f35b4f93","remote_ip":"127.0.0.1"}

lograge-sql lograge-sql ist eine Lograge-Erweiterung Gem, die SQL in das Protokoll ausgibt https://github.com/iMacTia/lograge-sql

lograge-sql


{
    "sql_queries": "name1 ({duration1}) {query1}\nname2 ({duration2}) query2 ...",
    "sql_queries_count": 3
}

Wie benutzt man

Beginnen wir mit der Quelle des Rails-Tutorials. https://github.com/yasslab/sample_app

lograge

  1. Füge lograge zu Gemfile hinzu

Gemfile


gem "lograge"
  1. Lograge-Einstellung auf eine der folgenden Optionen

config/environments/develpment.rb


  config.lograge.enabled = true
  1. Installieren Sie Gems mit `Bundle Install`
  2. `` `Rails s``` Server starten

Vor der Verwendung von lograge


Started GET "/" for 127.0.0.1 at 2020-06-17 15:01:01 +0900
   (0.1ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
  ↳ /Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
Processing by StaticPagesController#home as HTML
  User Load (0.3ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 101], ["LIMIT", 1]]
  ↳ app/helpers/sessions_helper.rb:13
  Rendering static_pages/home.html.erb within layouts/application
   (0.6ms)  SELECT COUNT(*) FROM "microposts" WHERE "microposts"."user_id" = ?  [["user_id", 101]]
  ↳ app/views/shared/_user_info.html.erb:4
  Rendered shared/_user_info.html.erb (3.3ms)
   (0.5ms)  SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ?  [["follower_id", 101]]
  ↳ app/views/shared/_stats.html.erb:5
   (0.5ms)  SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ?  [["followed_id", 101]]
  ↳ app/views/shared/_stats.html.erb:11
  Rendered shared/_stats.html.erb (16.1ms)
  Rendered shared/_error_messages.html.erb (0.6ms)
  Rendered shared/_micropost_form.html.erb (13.9ms)
   (0.2ms)  SELECT COUNT(*) FROM "microposts" WHERE (user_id = 101)
  ↳ app/views/shared/_feed.html.erb:1
  Rendered shared/_feed.html.erb (1.3ms)
  Rendered static_pages/home.html.erb within layouts/application (46.9ms)
  Rendered layouts/_shim.html.erb (0.4ms)
  Rendered layouts/_header.html.erb (1.0ms)
  Rendered layouts/_footer.html.erb (0.4ms)
Completed 200 OK in 610ms (Views: 543.5ms | ActiveRecord: 3.2ms)

Nach der Verwendung von lograge


   (0.2ms)  SELECT "schema_migrations"."version" FROM "schema_migrations" ORDER BY "schema_migrations"."version" ASC
  ↳ /Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
  User Load (0.2ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ? LIMIT ?  [["id", 101], ["LIMIT", 1]]
  ↳ app/helpers/sessions_helper.rb:13
   (7.0ms)  SELECT COUNT(*) FROM "microposts" WHERE "microposts"."user_id" = ?  [["user_id", 101]]
  ↳ app/views/shared/_user_info.html.erb:4
   (0.4ms)  SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."followed_id" WHERE "relationships"."follower_id" = ?  [["follower_id", 101]]
  ↳ app/views/shared/_stats.html.erb:5
   (0.4ms)  SELECT COUNT(*) FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = ?  [["followed_id", 101]]
  ↳ app/views/shared/_stats.html.erb:11
   (0.1ms)  SELECT COUNT(*) FROM "microposts" WHERE (user_id = 101)
  ↳ app/views/shared/_feed.html.erb:1
method=GET path=/ format=html controller=StaticPagesController action=home status=200 duration=663.54 view=564.69 db=9.17

Das Verbindungsergebnis der Root-Analyse wird in einer Zeile in der letzten Zeile ausgegeben


** Fügen Sie Folgendes hinzu, wenn Sie im Json-Format ausgeben möchten **

config/environments/develpment.rb


config.lograge.formatter = Lograge::Formatters::Json.new

Das Ergebnis der Verbindung zu Root wird im Json-Format angezeigt.

Json-Format


{"method":"GET","path":"/","format":"html","controller":"StaticPagesController","action":"home","status":200,"duration":694.98,"view":592.73,"db":3.04}

** Fügen Sie Hook hinzu, um Ihr Protokoll anzupassen **

Config.lograge.custom_options hinzugefügt

config/environments/develpment.rb


config.lograge.custom_options = ->(event) {
    exceptions = %w(controller action format authenticity_token)
    payload = event.payload
    payload[:params] = payload[:params].except(*exceptions) #controller,Beseitigen Sie den Aktionsnamen
    
    #Wenn eine Ausnahme auftritt, geben Sie Exception und Backtrace aus
    if payload[:exception]
      payload[:exception] = payload[:exception]
      payload[:exception_backtrace] = payload[:exception_object].backtrace[0..6]
    end
    payload
  }

Ausnahme zum Controller auslösen

static_pages_controller.rb


def home
    raise "error"
end

Schurke nach Root-Verbindung

Vor dem Hinzufügen von Hook (StaticPagesController)


{"method":"GET","path":"/","format":"html","controller":"StaticPagesController","action":"home","status":500,"error":"RuntimeError: error","duration":6.77,"view":0.0,"db":0.0,"sql_queries":"' (0.13) SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC'","sql_queries_count":1}

Mit dem Hinzufügen von Hook wurden `exception``` und` exception_backtrace``` hinzugefügt.

Nach dem Hinzufügen von Hook


{"method":"GET","path":"/","format":"html","controller":"StaticPagesController","action":"home","status":500,"error":"RuntimeError: error","duration":0.51,"view":0.0,"db":0.0,"params":{},"headers":"#<ActionDispatch::Http::Headers:0x00007f8ed7971e78>","view_runtime":null,"db_runtime":0,"exception":["RuntimeError","error"],"exception_object":"error","exception_backtrace":["/Users/xxxx/Desktop/ruby/sample_app/app/controllers/static_pages_controller.rb:9:in `home'","/Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/actionpack-5.2.3/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'","/Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/actionpack-5.2.3/lib/abstract_controller/base.rb:194:in `process_action'","/Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/actionpack-5.2.3/lib/action_controller/metal/rendering.rb:30:in `process_action'","/Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/actionpack-5.2.3/lib/abstract_controller/callbacks.rb:42:in `block in process_action'","/Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:132:in `run_callbacks'","/Users/xxxx/.rbenv/versions/2.3.7/lib/ruby/gems/2.3.0/gems/actionpack-5.2.3/lib/abstract_controller/callbacks.rb:41:in `process_action'"]}
  

** Hinzufügen von Elementen zu Payload durch Überschreiben der Funktion append_info_to_payload an Controller **

StaticPagesController


class StaticPagesController < ApplicationController
  def append_info_to_payload(payload)
    super
    payload[:host] = request.host
  end
end

Hostinformationen wurden hinzugefügt `" host ":" localhost "`

Nach Zugabe


{"method":"GET","path":"/","format":"html","controller":"StaticPagesController","action":"home","status":200,"duration":1321.96,"view":1148.47,"db":3.28,"params":{},"headers":"#<ActionDispatch::Http::Headers:0x00007fc6e8869d98>","view_runtime":1148.4679999998662,"db_runtime":3.281999999217078,"host":"localhost","sql_queries":"' (0.27) SELECT \"schema_migrations\".\"version\" FROM \"schema_migrations\" ORDER BY \"schema_migrations\".\"version\" ASC\nUser Load (0.51) SELECT  \"users\".* FROM \"users\" WHERE \"users\".\"id\" = ? LIMIT ?\n (0.4) SELECT COUNT(*) FROM \"microposts\" WHERE \"microposts\".\"user_id\" = ?\n (0.51) SELECT COUNT(*) FROM \"users\" INNER JOIN \"relationships\" ON \"users\".\"id\" = \"relationships\".\"followed_id\" WHERE \"relationships\".\"follower_id\" = ?\n (0.42) SELECT COUNT(*) FROM \"users\" INNER JOIN \"relationships\" ON \"users\".\"id\" = \"relationships\".\"follower_id\" WHERE \"relationships\".\"followed_id\" = ?\n (0.15) SELECT COUNT(*) FROM \"microposts\" WHERE (user_id = 101)'","sql_queries_count":6}

lograge-sql

  1. Füge lograge-sql zu Gemfile hinzu

Gemfile


gem "lograge-sql"
  1. Hinzufügen erforderlich

config/initializers/lograge.rb


require 'lograge/sql/extension'
  1. Installieren Sie Gems mit `Bundle Install`
  2. `` `Rails s``` Server starten

Ich konnte bestätigen, dass sql_queries und sql_queries_count hinzugefügt wurden.

Ergebnis


{"method":"GET","path":"/","format":"html","controller":"StaticPagesController","action":"home","status":200,"duration":93.2,"view":84.45,"db":0.76,"params":{},"headers":"#<ActionDispatch::Http::Headers:0x00007fedb15158a0>","view_runtime":84.45099999994454,"db_runtime":0.7550000000264845,"sql_queries":"'User Load (0.13) SELECT  \"users\".* FROM \"users\" WHERE \"users\".\"id\" = ? LIMIT ?\n (0.14) SELECT COUNT(*) FROM \"microposts\" WHERE \"microposts\".\"user_id\" = ?\n (0.14) SELECT COUNT(*) FROM \"users\" INNER JOIN \"relationships\" ON \"users\".\"id\" = \"relationships\".\"followed_id\" WHERE \"relationships\".\"follower_id\" = ?\n (0.18) SELECT COUNT(*) FROM \"users\" INNER JOIN \"relationships\" ON \"users\".\"id\" = \"relationships\".\"follower_id\" WHERE \"relationships\".\"followed_id\" = ?\n (0.16) SELECT COUNT(*) FROM \"microposts\" WHERE (user_id = 101)'","sql_queries_count":5}

Wenn Sie das Protokoll im Json-Format direkt in die Standardausgabe ausgeben möchten, fügen Sie Folgendes hinzu

develpment.rb


  config.lograge.logger = ActiveSupport::Logger.new(STDOUT)

Protokollausgabe

Ausgabe


Lograge.logger.info({ type: 'type', exception: 'exception'}.to_json)

lograge Quellreferenz https://github.com/roidrage/lograge/blob/1729eab7956bb95c5992e4adab251e4f93ff9280/lib/lograge.rb#L185

Recommended Posts

Protokollausgabe im Json-Format mit lograge / lograge-sql mit RubyOnRails
Spring Boot-Protokoll im JSON-Format ausgeben
Versuchen Sie es mit der JSON-Format-API in Java
Bereiten Sie die Protokollausgabe mit log4j in Eclipse vor.
Formatieren Sie JSON mit org.json
Format der Protokollausgabe von Tomcat selbst in Tomcat 8
Authentifizieren Sie 3 oder mehr Parameter im JSON-Format mit Spring Security
Japanisieren Sie mit i18n mit Rails
Steuerprotokollausgabe mit Doma2
Die Serialisierung von org.joda.time.DateTime zu JSON im ISO8601-Format erfolgt in Millisekunden
Protokollausgabe in Datei in Java
Aktivieren Sie die Protokollausgabe sowohl für Dateien als auch für die Konsole mit log4j in Eclipse.
Ausgabedatum in Java im erweiterten ISO 8601-Format
Stapelimplementierung in der RubyOnRails-Umgebung mit Digdag
Behandeln Sie große JSON mit Java Lambda
Ausgabe Bean als JSON im Frühjahr