Sha256: 022216f0a0e9ddd609fc18e6c6cd55a86db11dedc23b10a3085ccb6a8bf1d454

Contents?: true

Size: 1.83 KB

Versions: 2

Compression:

Stored size: 1.83 KB

Contents

* 自动记录 SQL 日志和 REPL 输入历史

  如果希望 Arql 可以自动记录 SQL 日志和 REPL 输入历史,可以:

  创建目录 =~/.arql.d/logs=
  
  创建一个文件 =~/.arql.d/sql_log.rb= ,内容如下:

  #+BEGIN_SRC ruby
    unless Arql::App.config[:append_sql]
      log_root_dir = File.expand_path('~/.arql.d/logs')
      log_dir = "#{log_root_dir}/%s" % Arql::App.env
      FileUtils.mkdir_p(log_dir)
      now = Time.now
      log_file = "#{log_dir}/%s.%s.%s.log" % [Time.now.strftime('%Y_%m%d_%H%M%S'), `hostname -s`.chomp.downcase, Process.pid]
      Arql::App.config[:append_sql] = log_file
    
      lfile = File.new(log_file, 'a')
      lfile.sync = true
      InputLogger = Logger.new(lfile)
    
      module Readline
        class << self
          alias_method :original_readline, :readline
          def readline(*args)
            Readline.original_readline(*args).tap do |user_input|
              InputLogger.info(user_input)
            end
          end
        end
      end
    end
  #+END_SRC


   然后在 =~/.arql.d/init.rb= 中引入这个文件:

   #+BEGIN_SRC ruby
     load(File.absolute_path(File.dirname(__FILE__) + "/sql_log.rb"))
   #+END_SRC

   这样就可以在 =~/.arql.d/logs= 目录下看到 SQL 日志和 REPL 输入历史了。

   示例:

   #+BEGIN_EXAMPLE
     I, [2024-04-07T17:12:00.530341 #20440]  INFO -- : P.count
     D, [2024-04-07T17:12:00.577305 #20440] DEBUG -- :   Post Count (22.6ms)  SELECT COUNT(*) FROM `post`
     I, [2024-04-07T17:12:02.879312 #20440]  INFO -- : P.all.t
     D, [2024-04-07T17:12:02.960014 #20440] DEBUG -- :   Post Load (64.1ms)  SELECT `post`.* FROM `post`
     I, [2024-04-07T17:12:54.721861 #20440]  INFO -- : P.pluck(:gender)
     D, [2024-04-07T17:12:54.756435 #20440] DEBUG -- :   Post Pluck (28.0ms)  SELECT `post`.`gender` FROM `post`
   #+END_EXAMPLE


Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
arql-0.3.31 sql-log-zh_CN.org
arql-0.3.30 sql-log-zh_CN.org