ruby logger

没有Java里的log4j那样的组件,调试程序的时候很难受,模仿Log4j的使用方法写的一个Ruby logger:

配置文件:

dev:
  level: debug
  stdout: 1
  file: ./dev.log
  roll_type: file_size
  roll_param: 500K          # support K/M 

pro:
  level: info
  stdout: 1
  file: ./pro.log
  roll_type: daily
  roll_param:               # if use daily, this param should be null

default: pro

比较粗糙,自己感觉是差不多够当下用就可以了。

配置文件的顶级keys是 dev, pro, ..., default,default的值应该是前面的某一个
stdout 为 1 表示会向终端输出,file没什么好说的。 roll_type 类似于 log4j 里的 roll file type(大概是这名字),这个值设置为 daily 的时候,下面的roll_param是不用填的,而把type设置为file size 的话,param 就需要填了,程序没有写默认值,这个值支持以K或者M作计量单位。
default 这个东东是,logger会自行创建一个全局变量:@@log,这个变量对应的配置,就是default后的那个。

 

 

打印出来的消息格式:

//这个是普通的debug消息,也有配合了 active_record-2.2.2 运行时 ar 产生的 sql 消息。
DEBUG 09-06-10 13:04:56 my_logger.rb:151: debug msg.
DEBUG 09-06-10 13:04:57 abstract_adapter.rb:189:in `log_info':   Lang Load (0.1ms)   SELECT * FROM `langs` WHERE (`langs`.`id` = 88) 

// 这个是带异常的消息:
ERROR 09-06-10 13:37:08 my_logger.rb:153: this is the error --asnvzxjvasjfs--:  
Connection refused - connect(2)    /usr/lib/ruby/1.8/net/http.rb:560:in `initialize'
    /usr/lib/ruby/1.8/net/http.rb:560:in `open'
    /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
    /usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
    /usr/lib/ruby/1.8/timeout.rb:93:in `timeout'
    /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
    /usr/lib/ruby/1.8/net/http.rb:553:in `do_start'
    /usr/lib/ruby/1.8/net/http.rb:542:in `start'
    /usr/lib/ruby/1.8/net/http.rb:1035:in `request'
    /usr/lib/ruby/1.8/net/http.rb:845:in `post'
    my_logger.rb:151

使用方式和log4j的完全相同: log.debug(msg); log.error(msg, e)

 

 

使用方式:

  1. my_logger.rb 的 130 行左右,require 'yaml' 附近,写的程序是读取配置文件的,这个根据应用,需要 **定制 ** 配置文件路径
  2. 配置yml里的logger时,假定配置了一个名为 dblog 的logger,在程序里可以用 MyLogger.get("dblog") 的方法取得 logger
  3. 配合 rails 使用的话, MyLogger这个类里面可能需要添加更多的方法

你可能感兴趣的:(sql,log4j,.net,Ruby,Rails)