有没有办法在Sequel中通过连接解开SQL日志

时间:2014-01-24 12:44:11

标签: mysql ruby sequel

我正在使用Sequel宝石,效果很好。但是我正在尝试调试多线程错误,所以我激活了日志(在续集级别:.i.e在创建与数据库的连接时使用Logger)。我的问题是,来自不同连接的所有SQL日志都纠缠在日志文件中,并且不知道哪个查询对应于哪个连接。将连接ID​​或某些内容添加到日志中非常有用。

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果内置任何内容,请尝试修补猴子或更改记录器或对其进行调用,因此它会在每个日志行前面加上线程的ID。

续集中的相关文件将是:

https://github.com/jeremyevans/sequel/blob/master/lib/sequel/database/logging.rb

基于它,很有可能你可以将Logger子类化并抛出它以使其工作。

http://www.ruby-doc.org/stdlib-2.1.0/libdoc/logger/rdoc/Logger.html

如果Logger文档及其代码是可以通过的,您可以通过覆盖add()方法来执行您想要的操作,例如:

def add(severity, message = nil, progname = nil, &block)
  thread_msg = "thread: #{Thread.current.object_id}"
  progname ||= @progname
  if message.nil?
    if block_given?
      message = yield
    else
      message = progname
      progname = @progname
    end
  end
  message = "#{thread_msg}\n#{message}"
  super(severity, message, progname, &block)
end