0

我是 Rails 的新手,我的 Rails 项目有问题。我使用 Log4r 作为我的记录器。我还在如何使用 Rails 3.0.x 配置 Log4r 中使用了 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 来同步输出?或者我该如何解决我的问题?

4

1 回答 1

1

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

我能想到的唯一解决方案是时间戳(以微秒计)并且不使用多行 Rails 日志输出,这不适合开发环境中的单个请求以外的任何内容。但即使这样也不能保证“有序”日志,因为它们可以在请求被服务时写入,或者在缓冲区再次刷新时的随机时间写入。

这是一个关于如何使用 Log4r 的深入教程,它还展示了如何将自定义时间戳放入日志并将所有重要信息放在一行中。这可以防止来自其他请求的日志写入您的主请求中,并且您可以有一个微秒的时间戳分辨率,然后手动订购。但是,如果您正在运行并发应用程序服务器,则顺序无关紧要,因为无论如何都不能保证顺序。

于 2013-12-01T09:43:07.007 回答