2014-10-21 8 views
5

Ich erlaube Benutzern, Dateien auf meiner Website hochzuladen. Und einige dieser Dateien können sehr groß sein und es verschlingt einen großen Teil meiner Log-Dateien. Also möchte ich es nicht auftauchen lassen. Ich weiß über:Filter lange Log-Parameter in Rails

config.filter_parameters += [:password] 

Um bestimmte Parameter zu filtern. Aber das Problem dabei ist, dass es der Parameter in einem Hash ist wie folgt:

{ 
    :person => { 
     :name => 'bob', 
     :file => { 
     :data => 'really long data. this can be tens of thousands of characters long' 
     } 
    } 
} 

Ich könnte hinzufügen: Daten zu den filter_parameters aber das würde viele Protokolle über die gesamte Website versteckt, da die Daten ein gemeinsamer Schlüssel (Ich kann das auch nicht zu etwas Obskurem umbenennen). Ist es möglich, dass filter_parameters einen geschachtelten Parameter aufnehmen? Oder gibt es eine andere Möglichkeit, die Länge aller Parameter zu begrenzen, damit sie, wenn sie größer als eine bestimmte Größe sind, nicht in meinen Protokolldateien gespeichert werden.

+0

Warum würde das Hochladen einer großen Datei viel Log verbrauchen? Es sollte ein einzelner Eintrag sein, der besagt, dass es hochgeladen wurde. –

+0

Ich denke, ich hätte das besser ausdrücken sollen. Es kommt nicht von meiner eigenen Website. Eine andere Website veröffentlicht sie über eine Route auf meiner Website. Es kommt mit vielen anderen Attributen und eine Datei ist eines der vielen Dinge, die es mir schickt. – Dragonfly

+0

Es würde wahrscheinlich viel helfen, wenn Sie ein minimales Beispiel der Datei zeigen würden, damit wir es sehen können, nicht versuchen, es sich vorzustellen. –

Antwort

5

landete ich in meinem application.rb so etwas wie dieses Putting

config.filter_parameters << lambda do |k, v| 
    if k == 'data' && v && v.class == String && v.length > 1024 
    v.replace('[FILTER]') 
    end 
end 

ich keinen besseren Weg, dies zu tun finden. Also suche ich in den Parametern nach dem Schlüssel 'Daten'. Und wenn der Wert für diese Daten ein String ist und über eine bestimmte Länge, ich ersetze es einfach, so dass die Protokolle nicht so überladen ist.