行更改日志文件中的位置
lines change places in logfile
我使用 logstasher gem 将我的日志转换成 json 对象
然后我在每个日志行之前添加一行,
在开发中一切正常。
在生产中有时线会改变位置。
这是应该的
{"index":{"_id":"3cc6221b633bd2bd0a95865e9c0c3dfd"}}
{"method":"GET","path":"/public/so_list","format":"*/*","controller":"public","action":"so_list","status":200,"duration":3152.27,"view":246.58,"db":2882.97,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:36Z","@version":"1"}
{"index":{"_id":"4b94f72318d88a8d7c1c5e46e5465246"}}
{"method":"GET","path":"/public/ajx_group_items/DY2149","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":118.89,"view":31.89,"db":74.0,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:36Z","@version":"1"}
{"index":{"_id":"b1ceb09e59379be7e26bff6b0d91ccd9"}}
{"method":"GET","path":"/public/login","format":"html","controller":"public","action":"login","status":200,"duration":44.24,"view":41.55,"db":1.25,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:36Z","@version":"1"}
有时会发生这种情况
第 2 行应与第 3 行换位
{"index":{"_id":"f6ee3d21d6e424652cdca28e9fdff611"}}
{"index":{"_id":"3c5050daede3f29d0402e888eef02046"}}
{"method":"GET","path":"/public/ajx_group_items/DY7100","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":341.08,"view":169.3,"db":157.56,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:37Z","@version":"1"}
{"method":"GET","path":"/public/ajx_group_items/DY7000","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":334.34,"view":191.42,"db":129.59,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:37Z","@version":"1"}
{"index":{"_id":"f6f59814f6cd45851d529a4efd1d5989"}}
{"method":"GET","path":"/public/ajx_group_items/DY7210","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":305.02,"view":221.0,"db":72.51,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:37Z","@version":"1"}
我的初始化程序看起来像那样
if LogStasher.enabled?
LogStasher::ActiveSupport::LogSubscriber.class_eval do
alias :original_process_action :process_action
def process_action(event)
# this creates the first line before each log
log_extra_line = Logger.new("#{Rails.root}/log/logstasher.log")
hash = {index: {_id: event.payload[:request_id]}}
log_extra_line.info(hash.to_json)
# this adds the log line
original_process_action(event)
end
end
end
然后我将初始值设定项更改为此
假设如果我将两个 arg 都传递给一个函数,然后做日志它工作,但我仍然有同样的问题。
if LogStasher.enabled?
LogStasher::ActiveSupport::LogSubscriber.class_eval do
alias :original_process_action :process_action
def process_action(event)
hash = {index: {_id: event.payload[:request_id]}}
do_logs(hash, event)
end
def do_logs(elastic_hash, original_log)
# this creates the first line before each log
log_extra_line = Logger.new("#{Rails.root}/log/logstasher.log")
log_extra_line.info(elastic_hash.to_json)
# this adds the log line
original_process_action(original_log)
end
end
end
我做错了什么?
这跟你的服务器并发度有关。当 运行 在本地时,默认情况下 Rails 服务器 运行 单线程。在生产中,它们通常是多线程的。日志行出现乱序,因为它们属于不同的请求。
查看 the rails docs on threading and concurrency 了解更多信息。
在初始化程序中,在 elastic_hash 我添加了事件。
新哈希首先具有索引,然后是事件。
那我做
log = Logger.new("#{Rails.root}/log/logstasher.log")
log.info(elastic_hash.to_json)
有了这个我只为每个日志创建一行,包括索引和事件
并且有效
在这种情况下,我不需要 gem logstasher 我相信它的工作方式也会有所不同
我使用 logstasher gem 将我的日志转换成 json 对象 然后我在每个日志行之前添加一行, 在开发中一切正常。 在生产中有时线会改变位置。
这是应该的
{"index":{"_id":"3cc6221b633bd2bd0a95865e9c0c3dfd"}}
{"method":"GET","path":"/public/so_list","format":"*/*","controller":"public","action":"so_list","status":200,"duration":3152.27,"view":246.58,"db":2882.97,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:36Z","@version":"1"}
{"index":{"_id":"4b94f72318d88a8d7c1c5e46e5465246"}}
{"method":"GET","path":"/public/ajx_group_items/DY2149","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":118.89,"view":31.89,"db":74.0,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:36Z","@version":"1"}
{"index":{"_id":"b1ceb09e59379be7e26bff6b0d91ccd9"}}
{"method":"GET","path":"/public/login","format":"html","controller":"public","action":"login","status":200,"duration":44.24,"view":41.55,"db":1.25,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:36Z","@version":"1"}
有时会发生这种情况
第 2 行应与第 3 行换位
{"index":{"_id":"f6ee3d21d6e424652cdca28e9fdff611"}}
{"index":{"_id":"3c5050daede3f29d0402e888eef02046"}}
{"method":"GET","path":"/public/ajx_group_items/DY7100","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":341.08,"view":169.3,"db":157.56,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:37Z","@version":"1"}
{"method":"GET","path":"/public/ajx_group_items/DY7000","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":334.34,"view":191.42,"db":129.59,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:37Z","@version":"1"}
{"index":{"_id":"f6f59814f6cd45851d529a4efd1d5989"}}
{"method":"GET","path":"/public/ajx_group_items/DY7210","format":"*/*","controller":"public","action":"ajx_group_items","status":200,"duration":305.02,"view":221.0,"db":72.51,"ip":null,"route":null,"request_id":null,"source":"unknown","tags":["request"],"@timestamp":"2018-11-15T18:53:37Z","@version":"1"}
我的初始化程序看起来像那样
if LogStasher.enabled?
LogStasher::ActiveSupport::LogSubscriber.class_eval do
alias :original_process_action :process_action
def process_action(event)
# this creates the first line before each log
log_extra_line = Logger.new("#{Rails.root}/log/logstasher.log")
hash = {index: {_id: event.payload[:request_id]}}
log_extra_line.info(hash.to_json)
# this adds the log line
original_process_action(event)
end
end
end
然后我将初始值设定项更改为此 假设如果我将两个 arg 都传递给一个函数,然后做日志它工作,但我仍然有同样的问题。
if LogStasher.enabled?
LogStasher::ActiveSupport::LogSubscriber.class_eval do
alias :original_process_action :process_action
def process_action(event)
hash = {index: {_id: event.payload[:request_id]}}
do_logs(hash, event)
end
def do_logs(elastic_hash, original_log)
# this creates the first line before each log
log_extra_line = Logger.new("#{Rails.root}/log/logstasher.log")
log_extra_line.info(elastic_hash.to_json)
# this adds the log line
original_process_action(original_log)
end
end
end
我做错了什么?
这跟你的服务器并发度有关。当 运行 在本地时,默认情况下 Rails 服务器 运行 单线程。在生产中,它们通常是多线程的。日志行出现乱序,因为它们属于不同的请求。
查看 the rails docs on threading and concurrency 了解更多信息。
在初始化程序中,在 elastic_hash 我添加了事件。 新哈希首先具有索引,然后是事件。 那我做
log = Logger.new("#{Rails.root}/log/logstasher.log")
log.info(elastic_hash.to_json)
有了这个我只为每个日志创建一行,包括索引和事件 并且有效
在这种情况下,我不需要 gem logstasher 我相信它的工作方式也会有所不同