Log4r - 输出无序

时间:2013-06-17 11:32:25

标签: ruby-on-rails logging config output log4r

我是Rails的新手,我的Rails项目出了问题。我使用Log4r作为记录器。我还在How to configure Log4r with Rails 3.0.x?使用了Log4r的配置。但是当我同时发送一些请求时,Log4r的输出有错误。这是无序的。 :(

有关错误输出日志文件的示例:

Started GET "/task_results.json" for 172.29.73.182 at 2013-06-17 17:36:38 +0700
Processing by TaskResultsController#index as JSON

Started GET "/favicon.ico" for 172.29.73.182 at 2013-06-17 17:36:38 +0700
Processing by ApplicationController#missing_page as 
  Parameters: {"path"=>"favicon"}
Completed 404 Not Found in 1ms (Views: 0.2ms | ActiveRecord: 0.0ms)
  [1m [36m (994.0ms) [0m   [1mSELECT task_result_id,task_id,worker_id,product_id,passed,date_time,details FROM task_results ORDER BY task_result_id DESC; [0m
Completed 200 OK in 8656ms (Views: 0.2ms | ActiveRecord: 994.0ms)

我想问一下如何配置Log4r来同步输出?或者我该如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

ruby​​是单线程的,所以我假设您在像unicorn这样的服务器上运行rails应用程序?

我能想到的唯一解决方案是时间戳(微秒),而不是使用多行Rails日志输出,它不适用于开发环境中的单个请求。但即使这样也不保证“有序”日志,因为它们可以在请求被提供时写入,也可以在随后再次刷新缓冲区时写入。

这是一个in-depth tutorial on how to use Log4r,它还显示了如何将自定义时间戳记录到日志中,并将所有重要信息放在一行中。这可以防止在主请求中写入其他请求的日志,并且您可以手动将时间戳分辨率设置为微秒,然后再订购。但是,如果您正在运行并发app-servers,则顺序无关紧要,因为无论如何都不能保证订单。