初尝log4r。
写在前面
日志的重要性自不用说,Rails中log的存放地址位于log目录下,有develogment.log, production.log等。开发的时候,我通常会单独开个terminal窗口,跑rails s, 出问题了,就在那个窗口看日志。现在看来,这还是挺低级的。
近来看一些前辈写的Rails相关知识,有推荐log4r,尝试了下, 还不错。日志按照日期分开存放,也很好查找。
除了rails,其他的ruby项目也可以用log4r(log for ruby),这里只说一下如何在Rails中使用log4r。
安装
先吐槽下,看了不少轮子,没见过log4r这种的,没有常规的installation,usage,Wiki里面也没有说明。所有的信息,需要自己去doc里面看manual,index, 手法别样,上图感受下:
好,不废话。看看如何在rails用它。
四步走。
在gemfile中添加
gemfile 'log4r'
终端bundle, 重启服务器。
修改
config/application.rb
require 'rails/all' # add these line for log4r require 'log4r' require 'log4r/yamlconfigurator' require 'log4r/outputter/datefileoutputter' Bundler.require(:default, Rails.env) if defined?(Bundler) module my_app class Application < Rails::Application #... # assign log4r's logger as rails' logger. include Log4r log4r_config= YAML.load_file(File.join(File.dirname(__FILE__),"log4r.yml")) YamlConfigurator.decode_yaml( log4r_config['log4r_config'] ) config.logger = Log4r::Logger[Rails.env] end end
新增配置文件
config/log4r.yml
:log4r_config: # define all loggers ... loggers: - name : production level : WARN trace : 'false' outputters : - datefile - name : development level : DEBUG trace : 'true' outputters : - datefile # define all outputters (incl. formatters) outputters: - type: DateFileOutputte name: datefile dirname: "log" filename: "my_app.log" # notice the file extension is needed! formatter: date_pattern: '%H:%M:%S' pattern : '%d %l: %m ' type : PatternFormatter
这时,如果重启rails,会发现报错:
undefined method `formatter' for #<Log4r::Logger:0x007fd97a78e780> (NoMethodError)
我当时也是懵逼,不知道怎么解决,后来Google到了解决方法。对于Rail4.0+ ,需要添加文件,声明formatter这个method。
新增文件
config/initializers/log4r_patch_for_rails4.rb
:class Log4r::Logger def formatter() end end
配置完成!重启下服务器,然后你会发现不管做了什么操作,terminal终端什么也没有输出,一直保持如下内容:
而log文件夹下会出现按照日期分开的日志文件,类似:my_log_2018-03-08.log, my_log_2018-03-09.log
日志文件内容类似这样:
因为outputters选择了DateFileOutputte,相比之前在rails s窗口查看,多了时间和logger类型。
具体的输出格式也可以在config/log4r.yml
进行更换,log4r的GitHub库列出来所有的格式:
OK,大功告成!!
另:建了个gist,上述提到的log4r的配置文件代码,可见using log4r on rails