mysql - 有没有办法通过 Sequel 中的连接来理清 SQL 日志

标签 mysql ruby sequel

我正在使用 Sequel gem,效果非常好。不过,我正在尝试调试多线程错误,因此我激活了日志(在续集级别:即在创建与数据库的连接时使用记录器)。我的问题是,来自不同连接的所有 SQL 日志都纠结在日志文件中,并且不知道哪个查询对应于哪个连接。将连接 ID 或其他内容添加到日志中将非常有用。

有办法做到这一点或替代解决方案吗?

最佳答案

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

Sequel 中的相关文件是:

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

关于mysql - 有没有办法通过 Sequel 中的连接来理清 SQL 日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21333071/

相关文章:

ruby - 如何在 Mac OS X Lion 上使用 rvm 安装 Maglev?

ruby - 公共(public)初始化向量?

ruby - SEQUEL Postgres 连接查询

ruby - Ruby Sequel.migration 中不区分大小写的唯一性验证

mysql - 为什么我的数据源在 LoopBack 4 中没有从 'memory db' 更改为 MySQL?

php - 在自定义查询php中匹配用户密码

ruby-on-rails - Heroku 应用程序崩溃错误 H10.. 无法解决,请帮助

sql - 在 SQL 中,如何选择已修改的列?

"or"语句中的 MySQL 索引

mysql - 如何在ruby中获取表名数组