小编pet*_*247的帖子

Rails日志文件"未打开"

我正在将我的应用程序从ruby 1.8.7迁移到1.9.3(以及稍后升级Rails).但是我在登录1.9.3时遇到了一些问题.在控制台或服务器启动时,在environment.rb中使用以下代码

logfile = File.open(File.join(RAILS_ROOT,'/log/call_log.log'), 'a')
CALL_LOGGER = AuditLogger.new(logfile)
CALL_LOGGER.info "CALL_LOGGER: Server started."
Run Code Online (Sandbox Code Playgroud)

我明白了

/usr/local/rvm/scripts/irbrc.rb:32:in `write': not opened for writing (IOError)
Run Code Online (Sandbox Code Playgroud)

AuditLogger定义如下:

class AuditLogger < Logger
  def format_message(severity, timestamp, progname, msg)
      "#{timestamp.strftime("%Y-%m-%d %H:%M:%S")} #{progname} #{severity} #{msg}\n" 
  end 
end
Run Code Online (Sandbox Code Playgroud)

如果我用irb手动执行此操作,则可行

1.9.3-p551 :006 > logfile = File.open(File.join('/var/my_app/log/call_log.log'), 'a')
=> #<File:/var/my_app/log/call_log.log>
 => #<AuditLogger:0x00000001ad95e8 @progname=nil, @level=0, @default_formatter=#<Logger::Formatter:0x00000001ad95c0 @datetime_format=nil>, @formatter=nil, @logdev=#<Logger::LogDevice:0x00000001ad9570 @shift_size=nil, @shift_age=nil, @filename=nil, @dev=#<File:/var/my_app/log/call_log.log>, @mutex=#<Logger::LogDevice::LogDeviceMutex:0x00000001ad9548 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Mutex:0x00000001ad94f8>>>>
1.9.3-p551 :011 > CALL_LOGGER.info "CALL_LOGGER: Server started."
 => true
Run Code Online (Sandbox Code Playgroud)

我怀疑这个班级可能被另一个班级覆盖了吗?所以我添加了一些代码来确定当前使用的文件的类

@file.class.ancestors
[File, IO, File::Constants, Enumerable, Object, …
Run Code Online (Sandbox Code Playgroud)

ruby logging ruby-on-rails ruby-1.9.3 ruby-1.8.7

8
推荐指数
1
解决办法
1703
查看次数

标签 统计

logging ×1

ruby ×1

ruby-1.8.7 ×1

ruby-1.9.3 ×1

ruby-on-rails ×1