Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging JRuby on Rails日志旋转失败_Logging_Jruby_Dst_Jrubyonrails_Jruby Rack - Fatal编程技术网

Logging JRuby on Rails日志旋转失败

Logging JRuby on Rails日志旋转失败,logging,jruby,dst,jrubyonrails,jruby-rack,Logging,Jruby,Dst,Jrubyonrails,Jruby Rack,我们在Tomcat上部署了一个JRuby on Rails 2应用程序,使用默认的Rails记录器。在我们越过DST边界一段时间后,我们发现应用程序已死亡,日志中有以下错误消息: org.jruby.rack.RackInitializationException: Shifting failed. '/tc_instance/applogs/search.log.20111106' already exists. 通常,圆木在午夜时轮换。前一天的日志始终具有23:59的最终时间戳,11月6日

我们在Tomcat上部署了一个JRuby on Rails 2应用程序,使用默认的Rails记录器。在我们越过DST边界一段时间后,我们发现应用程序已死亡,日志中有以下错误消息:

org.jruby.rack.RackInitializationException: Shifting failed. '/tc_instance/applogs/search.log.20111106' already exists.
通常,圆木在午夜时轮换。前一天的日志始终具有23:59的最终时间戳,11月6日的日志除外,其时间戳为22:59

-rw-rw-rw-  300683179 Nov  3 23:59 search.log.20111103
-rw-rw-rw-  226082012 Nov  4 23:59 search.log.20111104
-rw-rw-rw-  79789353 Nov  5 23:59 search.log.20111105
-rw-rw-rw-  109080879 Nov  6 22:59 search.log.20111106
因此,所发生的是日志试图在晚上11点而不是午夜翻滚。然后,当它试图创建新一天的日志时,它使用的是相同的日期

我们的配置似乎有问题,或者日志旋转定时逻辑有缺陷

以下是environment.rb的相关部分:

  # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
  # Run "rake -D time" for a list of tasks for finding time zone names.
  config.time_zone = 'UTC'

  if defined?($servlet_context)
    include_class java.lang.System
    app_logs_path = System.getProperty("appLogsPath")
    if app_logs_path.nil?
      Rails.logger.error("***System Property 'appLogsPath' was not set.  Please contact the system administrator immediately!")
    else
      config.logger = Logger.new("#{app_logs_path}/search.log", "daily")
      config.logger.formatter = Logger::Formatter.new
      config.logger.datetime_format = "%Y-%m-%d %H:%M:%S"
      config.logger.level = Logger::Severity::WARN
      def config.format_message(severity, timestamp, progname, msg)
        "[#{timestamp.to_formatted_s(:db)} #{severity}] #{msg}\n"
      end

    end
  end
我假设'UTC'的config.time_zone设置是针对ActiveRecord的,但我想知道这是否是一个原因


我的问题是:有什么问题?此外,日志旋转定时逻辑在哪里?它是在Rails、Jruby机架中还是在底层日志机制中?

Tomcat通常使用log4j,这通常需要进行最后的润色才能顺利进行

查看一些最佳实践:

  • *

  • *


*显然有点不同,未经测试,但看起来很有用。这可能会杀死你的狗并吃掉你的孩子,因此请小心部署任何更改。

这似乎是JRuby中的一个bug(http://jira.codehaus.org/browse/JRUBY-6191)这会影响1.8模式。解决方法是使用1.9模式或使用“logger”gem


更新:JRuby团队指出,实际上是MRI Ruby 1.8.7中的记录器显示了此缺陷。为了兼容性,它们不会更改此行为。上述解决方法适用(并且似乎工作正常)。

切换到log4j等备用记录器确实是一种可能的解决方案,因此我授予您奖金。