【问题标题】:Where is the Rails app log on ubuntu server (nginx+passenger+capistrano)?ubuntu 服务器(nginx+passenger+capistrano)上的 Rails 应用程序日志在哪里?
【发布时间】:2020-04-30 05:23:13
【问题描述】:

我们有一个 Rails 6 应用程序,它正在部署到具有以下设置的 Ubuntu 服务器:

Nginx 1.17 和乘客 6,使用 capistrano v3 部署版本

我可以找到以下日志文​​件:

  • Nginx(访问和错误日​​志):

/var/log/nginx/access.log & /var/log/nginx/error.log

  • 乘客日志:(在暂存环境中)

/home/deploy/myapp/current/log/staging.log

写在乘客日志中的日志(据我了解,应该有应用程序日志),只有用于表迁移和创建的 Ruby 日志,但没有 ruby​​ 应用程序日志

所以上述日志都没有 Rails 应用程序日志(即:显示 Rails 详细信息的日志,如开发环境中的rails s 输出)& nginx 访问日志仅显示加载页面时的静态资产日志但不是 ruby​​ 或 sql 日志

对我来说合乎逻辑的地方,staging.log file,只有陈旧的日志数据,没有写入任何新的 Rails 日志

请问Rails 应用程序日志在哪里?

【问题讨论】:

  • 您确定应用程序运行在staging 环境中吗? (检查您的乘客配置)。其他选项:是否在config/environment/staging.rbconfig/aplication.rb 中定义了自定义记录器(例如记录到 syslog 或外部记录服务,如 loggly 或 datadog?)
  • 感谢一百万 Natahan,您的绝妙建议向我展示了这个问题,非常感谢,我会将其作为答案,但感谢您!

标签: ruby-on-rails ruby nginx passenger


【解决方案1】:

Rails 默认将其日志写入log/ENVIRONMENT.log 文件(其中ENVIRONMENT 被您的RAILS_ENV 环境变量的值替换。

在您的生产环境中,日志可能会写入/home/deploy/myapp/current/log/production.log

请注意,如果该文件不存在,Rails 会尝试创建该文件。如果运行您的应用的用户没有创建(或写入)文件所需的权限,则它根本不会写入日志。

【讨论】:

  • 感谢@holger 的帮助,事实证明这是暂存配置中的一些东西,正如 Nathan 指出的那样,我没有注意到
【解决方案2】:

在 Nathan 评论的指导下,解决这个问题的功劳归于他:

问题的原因是:

staging.rb 中,我有这个日志配置

& 环境变量被定义为export RAILS_LOG_TO_STDOUT='enabled'

  # Use default logging formatter so that PID and timestamp are not suppressed.
  config.log_formatter = ::Logger::Formatter.new

  if ENV["RAILS_LOG_TO_STDOUT"].present?
    logger           = ActiveSupport::Logger.new(STDOUT)
    logger.formatter = config.log_formatter
    config.logger = ActiveSupport::TaggedLogging.new(logger)
  end

所以删除 env 变量:

RAILS_LOG_TO_STDOUT='enabled'

允许 Rails 日志按预期显示在正确的目录中:

/home/user/project-name/current/log/staging.log

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 2014-03-07
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    相关资源
    最近更新 更多