Jay*_*dse 7 logging ruby-on-rails-3
我想在不重新启动应用程序的情况下更改正在运行的Rails 3.2.x应用程序的日志记录级别.我的目的是使用它来进行短时调试和信息收集,然后再将其恢复到通常的日志记录级别.
我也明白,升序的级别是调试,信息,警告,错误和致命,生产服务器记录信息和更高,而开发日志调试和更高.
我明白,如果我跑
Rails.logger.level=:debug #or :info, :warn, :error, :fatal
Run Code Online (Sandbox Code Playgroud)
这会立即改变日志记录级别吗?
如果是这样,我可以通过编写Rake任务来调整日志记录级别,或者我是否需要通过添加路由来支持这一点?例如在config/routes.rb中:
match "/set_logging_level/:level/:secret" => "logcontroller#setlevel"
Run Code Online (Sandbox Code Playgroud)
然后在logcontroller中设置级别.(:level是日志级别,并且:客户端和服务器之间共享的秘密,是防止随机用户调整日志级别的东西)
哪个更合适,rake task或/ set_logging_level?
lza*_*zap 11
为什么不使用操作系统信号呢?例如,在UNIX上,user1和user2信号可以免费用于您的应用程序:
config/initializers/signals.rb:
trap('USR1') do
Rails.logger.level = Logger::DEBUG
end
trap('USR2') do
Rails.logger.level = Logger::WARN
end
Run Code Online (Sandbox Code Playgroud)
然后就这样做:
kill -SIGUSR1 pid
kill -SIGUSR2 pid
Run Code Online (Sandbox Code Playgroud)
只是确保你不要覆盖服务器的信号 - 每个服务器利用各种信号来记录日志轮换,子进程终止和终止等等.
在 Rails 控制台中,您可以简单地执行以下操作:
Rails.logger.level = :debug
Run Code Online (Sandbox Code Playgroud)
现在所有执行的代码都将以该日志级别运行
由于您必须更改正在运行的Rails 实例中的级别,因此简单的 rake 任务将无法工作。
我会选择专用路线。
我将使用应用程序的标准用户身份验证(如果您的应用程序有用户)而不是共享秘密,并限制对管理员/超级用户的访问。
| 归档时间: |
|
| 查看次数: |
8099 次 |
| 最近记录: |