2016-09-13 34 views
10

Dodaję usystematyzowane logowanie do aplikacji Rails 4. Używając lograge i , jak opisuję w this article, mam rzeczy w większości działające.Z Rails 4 i logowaniem strukturalnym, w jaki sposób mogę dodać pole identyfikatora żądania do logów?

Mam problem z dodaniem identyfikatora żądania do dzienników. Najbliższy znalazłem jest dodanie tego do config/${ENV}.rb:

config.log_tags = [:uuid] 

Ale to dodaje identyfikator żądania do listy tagów, zamiast dodawania go jako pole o nazwie.

{ 
    "tags": [ 
    "da76b4be-01ae-4cc4-8d3c-87062ea02cfe" 
    ], 
    "host": "services", 
    "severity": "DEBUG", 
    "@version": "1", 
    "@timestamp": "2016-09-13T17:24:34.883+00:00", 
    "message": "..." 
} 

Jest to problematyczne. To sprawia, że ​​bardziej niewygodne i mniej oczywiste, w jaki sposób szukać konkretnego identyfikatora wniosku. Ponadto parsowanie komunikatu w logstash powoduje nadpisanie wszystkich innych znaczników, które są już powiązane z komunikatem dziennika.

Czy jest jakiś sposób, aby dodać identyfikator żądania do dziennika jako nazwanego pola?

{ 
    "request_id", "da76b4be-01ae-4cc4-8d3c-87062ea02cfe", 
    "host": "services", 
    "severity": "DEBUG", 
    "@version": "1", 
    "@timestamp": "2016-09-13T17:24:34.883+00:00", 
    "message": "..." 
} 

Odpowiedz

1

Istnieje kilka sposobów, aby to zrobić. Od Lograge, można użyć custom_options:

# all your lograge stuff... 
    config.lograge.enabled = true 

    config.lograge.custom_options = lambda do |event| 
    # use the `event.payload` 
    {uuid: event.payload[:uuid]} 
    end 

Można przeciążać żadnej opcji tutaj - oni przejąć te lib za.

Kod odpowiedzialny za to to here. Test, który pokazuje, że działa, to here.

+0

Próbowałem tego, ale hash 'payload' nie ma pola uuid. W dziennikach mam tylko "uuid": null'. – leedm777

+0

Znalazłem, że potrzebujesz 'append_info_to_payload' zdefiniowanego w' ApplicationController', aby to działało (zobacz https://github.com/roidrage/lograge/blob/master/README.md). Ale to tylko dodaje pola niestandardowe do dzienników dostępu. Aby identyfikator UUID był użyteczny, musi znajdować się we wszystkich dziennikach powiązanych z tym żądaniem (w ten sam sposób, w jaki Railsy umieszczają tagi przy każdym wpisie dziennika). – leedm777