加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – ActiveRecord干扰Logger

发布时间:2020-12-17 02:58:00 所属栏目:百科 来源:网络整理
导读:似乎使用ActiveRecord(需要ActiveSupport)与Logger类混淆,导致困难.这可以通过一些示例代码看到: require 'rubygems'#require 'activerecord'require 'logger'log = Logger.new(STDERR)log.sev_threshold = Logger::INFOlog.datetime_format = "%Y-%m-%d %H
似乎使用ActiveRecord(需要ActiveSupport)与Logger类混淆,导致困难.这可以通过一些示例代码看到:

require 'rubygems'
#require 'activerecord'
require 'logger'

log = Logger.new(STDERR)
log.sev_threshold = Logger::INFO
log.datetime_format = "%Y-%m-%d %H:%M:%S"

log.debug "debug"
log.info "info"
log.warn "warn"
log.error "error"
log.fatal "fatal"

运行此代码将产生这个可爱的输出:

I,[2009-09-02 10:49:39#27562]  INFO -- : info
W,[2009-09-02 10:49:39#27562]  WARN -- : warn
E,[2009-09-02 10:49:39#27562] ERROR -- : error
F,[2009-09-02 10:49:39#27562] FATAL -- : fatal

但是,如果我取消注释require’activerecord’行,我会改为:

info
warn
error
fatal 

所以我在查看activesupport后进行了一些搜索:

logger.rb

我找到了以下“工作方案”

log = Logger.new(STDERR)
log.sev_threshold = Logger::INFO
log.datetime_format = "%Y-%m-%d %H:%M:%S"
class Formatter
      Format = "%s,[%s#%d] %5s -- %s: %sn"

      attr_accessor :datetime_format

      def initialize
        @datetime_format = nil
      end

      def call(severity,time,progname,msg)
        Format % [severity[0..0],format_datetime(time),$$,severity,msg2str(msg)]
      end

      private
        def format_datetime(time)
          if @datetime_format.nil?
             time.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d " % time.usec
          else
            time.strftime(@datetime_format)
          end
        end

        def msg2str(msg)
          case msg
          when ::String
            msg
          when ::Exception
            "#{ msg.message } (#{ msg.class })n" <<
            (msg.backtrace || []).join("n")
          else
            msg.inspect
          end
        end
end
f=Formatter.new
f.datetime_format = "%Y-%m-%d %H:%M:%S"
log.formatter=f

使用上面的内容,我得到了我喜欢的输出.然而,这对我来说似乎是粗暴的,而且是非鲁莽的.有谁知道是否有更简单的方法来获得理想的结果?

谢谢!

解决方法

在最后一小时,同样的问题困扰着我,但解决方案非常简单.

ActiveSupport使用SimpleFormatter,您必须手动设置’旧’Formatter.

require 'rubygems'
require 'active_support'
require 'logger'

log = Logger.new(STDERR)
log.sev_threshold = Logger::INFO
log.datetime_format = "%Y-%m-%d %H:%M:%S"
log.formatter = Logger::Formatter.new

Ps:Sry因为我的英语不好:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读