生产日志是空白的?

Posted

技术标签:

【中文标题】生产日志是空白的?【英文标题】:Production log is blank? 【发布时间】:2014-06-17 15:11:58 【问题描述】:

我的 puma 配置:

path = Dir.pwd + "/tmp/puma/"

threads 0,20
environment "production"
daemonize true
drain_on_shutdown true

bind  "unix://" + path + "socket/puma.sock"
pidfile path + "pid/puma.pid"
state_path path + "pid/puma.state"

我的环境/production.rb

MyApp::Application.configure do    
  config.log_level = :debug
end

我启动我的服务器:

starkers@ubuntu:~/Desktop/myspp$ pumactl -F config/puma.rb start
=> Booting Puma
=> Rails 4.0.2 application starting in production on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
=> Ctrl-C to shutdown server
config.eager_load is set to nil. Please update your config/environments/*.rb files accordingly:

  * development - set it to false
  * test - set it to false (unless you use a tool that preloads your test environment)
  * production - set it to true

Puma 2.8.2 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://0.0.0.0:3000

我浏览我的应用程序。我的 log/production.log 是空白的。不知道为什么?

我的应用程序中的目录访问权限为0777

不知道是什么原因造成的。真的需要日志(显然)。在本地和远程发生,因此与我的配置有关。但是我不确定是什么配置。 puma/ubuntu/rails 中是否有任何可能导致此问题的内容?

development.log 完美运行。

我已将 development.rb 复制粘贴到 production.rb 文件中。字面意思相同。好的?相同的 development.rb 和 production .rb 然而:
RAILS_ENV=development rails s

填充 development.log

RAILS_ENV=production rails s

让 production.log 像金·卡戴珊的脑袋一样空空如也。

【问题讨论】:

不确定是不是错字,但文件是log/production.log 听起来更像是权限问题,只是为了测试,将 log/production.log 上的权限设置为 777,看看是否有区别。 我跑了sudo chmod 777 -R app_root重启了服务器,但还是没有生产日志!但是,我现在确实获得了开发日志(我以前没有) 您没有包含您的配置。你应该启动服务器puma -c config/puma.rb -e production @zishe 我设置为false,没区别。 【参考方案1】:

在配置文件末尾设置bind

path = Dir.pwd + "/tmp/puma/"

threads 0,20
environment "production"
daemonize true
drain_on_shutdown true

pidfile path + "pid/puma.pid"
state_path path + "pid/puma.state"
bind  "unix://" + path + "socket/puma.sock"

我使用命令pumactl -F config/puma.rb start 启动服务器(我想没有区别,但无论如何)。

我建议使用# 作为路径:

pidfile "#pathpid/puma.pid"
state_path "#pathpid/puma.state"
bind  "unix://#pathsocket/puma.sock"

但这是你的选择。

希望它有所帮助(对我来说,你的配置也不起作用)。

您还可以添加 Puma 日志:

stdout_redirect "#Dir.pwd/log/puma.stdout.log", "#Dir.pwd/log/puma.stderr.log"

bind之前添加这一行。

【讨论】:

【参考方案2】:

如果您想将服务器的输出添加到日志中,最简单的方法是告诉您的系统完全这样做。运行您的服务器启动命令,例如:

pumactl -F config/puma.rb start >> log/development.log

会将服务器的每一行输出附加到开发日志中。尽管为了使调试更容易,您可能希望为每个服务器提供自己的日志,例如log/puma.log。如果这样做,您可能希望每次启动服务器时都从头开始重写文件,而不是保留累积日志,如果是这种情况,只需将 >> 转换为 >,例如:

pumactl -F config/puma.rb start > log/puma.log

但是,如果您将系统设置为在服务器失败时自动重新启动服务器,则使用 > 将覆盖日志以了解可能导致服务器重新启动时崩溃的原因。

同样,您可以通过以下方式启动您的 Rails 服务器来让您的 production.log 工作:

RAILS_ENV=production rails s >> log/production.log

如果您想像在生产环境中一样在后台运行服务器,可以在末尾添加一个& 字符,例如:

pumactl -F config/puma.rb start > log/puma.log &

如果您这样做,您可能希望存储进程标识符,以便稍后杀死服务器,因为^C 不适用于后台进程。要存储进程 ID,请在 lib/pids/puma.pid 之类的某个位置创建另一个空文件,然后将该 puma 服务器的进程 ID 导出到空文件,例如:

pumactl -F config/puma.rb start > log/puma.log &
echo $! > lib/pids/puma.pid

然后你就可以杀死服务器了:

kill `cat lib/pids/puma.pid`

重要的是要记住,即使您将服务器的输出附加到您的development.log 文件中,它也不会显示在您的开发 Rails 服务器的输出中。如果您想实时查看日志以进行调试,可以使用tailf 命令,例如:

tailf log/puma.log

有关命令行界面的更多信息,Command Line Crash Course 是一个很好的资源。

【讨论】:

以上是关于生产日志是空白的?的主要内容,如果未能解决你的问题,请参考以下文章

从 Android 的生产代码中删除日志记录?

生产环境业务日志的管理

kubectl 日志不返回任何内容(空白)

Ruby on Rails 生产日志轮换

关于生产环境打日志的一些思考

ELK部署生产实践部署