Comments (4)
i've solved. the problem is ActionDispatch::Http::UploadedFile dump is too verbose.
just pick want you to see. i just picked "Header" cuz which contains whole information uploaded file.
here is ActionDispatch::Http::UploadedFile model
{"file"=>#<ActionDispatch::Http::UploadedFile:0x007f7f7abf8050 @tempfile=#<Tempfile:/var/folders/ml/s691k8ls7f3568nh2yw_nm9c0000gn/T/RackMultipart20170913-64272-11xee7s.png>, @original_filename="스크린샷 2017-09-08 오후 3.11.12.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"\xE1\x84\x89\xE1\x85\xB3\xE1\x84\x8F\xE1\x85\xB3\xE1\x84\x85\xE1\x85\xB5\xE1\x86\xAB\xE1\x84\x89\xE1\x85\xA3\xE1\x86\xBA 2017-09-08 \xE1\x84\x8B\xE1\x85\xA9\xE1\x84\x92\xE1\x85\xAE 3.11.12.png\"\r\nContent-Type: image/png\r\n">, "format"=>:json, "controller"=>"api/v1/uploads", "action"=>"create"}
it's too verbose to logging.
it might be fine to pick @headers value.
monkey patch for UploadedFile
class ActionDispatch::Http::UploadedFile
def as_json(options = nil)
%w(headers).inject({}) do |hash, attr|
hash[attr] = send(attr).force_encoding('utf-8')
hash
end
end
end
config/application.rb
config.lograge.custom_options = lambda do |event|
exceptions = %w(controller action format)
{params: event.payload[:params].as_json(except: exceptions)}
end
before uploadedFile dump
{"file"=>#<ActionDispatch::Http::UploadedFile:0x007f7f7abf8050 @tempfile=#<Tempfile:/var/folders/ml/s691k8ls7f3568nh2yw_nm9c0000gn/T/RackMultipart20170913-64272-11xee7s.png>, @original_filename="스크린샷 2017-09-08 오후 3.11.12.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"file\"; filename=\"\xE1\x84\x89\xE1\x85\xB3\xE1\x84\x8F\xE1\x85\xB3\xE1\x84\x85\xE1\x85\xB5\xE1\x86\xAB\xE1\x84\x89\xE1\x85\xA3\xE1\x86\xBA 2017-09-08 \xE1\x84\x8B\xE1\x85\xA9\xE1\x84\x92\xE1\x85\xAE 3.11.12.png\"\r\nContent-Type: image/png\r\n">, "format"=>:json, "controller"=>"api/v1/uploads", "action"=>"create"}
lodrage doesn't work
Could not log "process_action.action_controller" event. Encoding::UndefinedConversionError: "\x89" from ASCII-8BIT to UTF-8
after uploadedFile dump
{"files"=>[{"headers"=>"Content-Disposition: form-data; name=\"files[]\"; filename=\"스크린샷 2017-09-08 오후 3.11.12.png\"\r\nContent-Type: image/png\r\n"}], "format"=>"json", "controller"=>"api/v1/uploads", "action"=>"create"}
lodrage it works!
"params":{"file":{"content_type":"image/png","headers":"Content-Disposition: form-data; name=\"file\"; filename=\"스크린샷 2017-09-08 오후 3.11.12.png\"\r\nContent-Type: image/png\r\n"
from lograge.
I just solved this myself by calling as_json(except: ["tempfile"])
on the params.
config.lograge.custom_options = lambda do |event|
{
params: event.payload[:params].as_json(except: ["tempfile"])
}
end
from lograge.
Certainly looks likely to me. The ActionDispatch::Http::UploadedFile
is not something you want instrumented in your logs I would assume. You should reject those particular params from the payload
. You could do that by reject
ing the named parameter(s) or you could potentially walk the parameters and check for ActionDispatch::Http::UploadedFile
but that feels slightly dirty to me.
from lograge.
The problem is because JSON.dump
was trying to dump the file content. Here is my monkey patch:
lib/lograge_patch.rb
# Patch ActionDispatch::Http::UploadedFile
class ActionDispatch::Http::UploadedFile
def as_json(options = nil)
%w(content_type headers original_filename size).inject({}) do |hash, attr|
hash[attr] = send(attr)
hash
end
end
end
module Lograge
module Formatters
class JsonExt < Lograge::Formatters::Json
def call(data)
data.respond_to?(:to_json) ? data.to_json : super
end
end
end
end
config/application.rb
require 'lograge_patch'
config.lograge.formatter = Lograge::Formatters::JsonExt.new
from lograge.
Related Issues (20)
- No logs shown in CloudWatch when lograge is enabled (Rails/ECS/Fargate) HOT 1
- Why are we striping params for redirect url?
- [Question] Project status HOT 2
- Monkey patching of Rails::Rack::Logger#call_app loses request.action_dispatch instrumentation HOT 1
- [Question] Logstash-event loaded from gh
- How to add extra log payload in action cable?
- Rails support HOT 1
- Should we demote some of our formatters to "contrib"?
- Unable to Filter ActionCable Params HOT 2
- exception cannot show on rescue_from custom handler exception HOT 1
- custom_payload is "persisted' (or per se kept) between 2 requests HOT 4
- Request: new gem release HOT 5
- Any thoughts on supporting `Turbo::StreamsChannel`? HOT 1
- Sinatra support? HOT 1
- Simpler way to remove all log subscribers. HOT 3
- Redirect in routes not handled by lograge
- Confused about what Rails logging is eliminated HOT 1
- ActionView logs not completely suppressed with Rails 7.1+
- TypeError: no implicit conversion of String into Integer when adding lograge to Rails project with Rack 3.0.9 and Puma 6.4.2 HOT 3
- Suggestion from Rails regarding better patching mechanism
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lograge.