2

我正在 Windows 上使用 Sinatra/Thin 开发一个简单的 Web 服务

在我的应用程序中,我有以下内容可以启用对文件的日志记录:

Dir.mkdir('log') unless File.exists?('log')
use Rack::CommonLogger, File.new('log/access.log', 'w')

当服务器启动时,文件被创建。但是,在我关闭服务器之前,没有任何内容写入文件。

另一方面,当我使用 Logger 时,如下所示:

logger = Logger.new('log/access.log', 10, 1024000)
use Rack::CommonLogger, logger

它甚至不将条目写入日志文件,除了一行写着:

# Logfile created on 2013-02-13 11:23:45 +0200 by logger.rb/31641

我需要的是:

  • 要立即写入的日志条目
  • 能够记录日志轮换功能
4

2 回答 2

1

我一直在我的 sinatra 应用程序中使用这个解决方案(继承 Sinatra::Base)before do
env['rack.logger'] = Logger.new("log/#{App.environment}.log")
logger.datetime_format = "%Y/%m/%d @ %H:%M:%S "
logger.level = Logger::INFO if App.production?
end

于 2013-04-24T14:42:08.270 回答
0

使用 Sinatra 经典样式应用程序,将文件的属性同步设置为 true 以进行日志记录,对我有用。在生产和开发中:

Logger.class_eval { alias :write :'<<' }
flogger = File.open("log/app.log","a")
flogger.sync = true # This is what makes to write always
logger = Logger.new(flogger)
use Rack::CommonLogger, logger

资料来源:

于 2014-03-25T11:26:15.407 回答