我想要:
module MyLog
def log
unless @log
@log = Logger.new(log_path)
@log.formatter = proc do |severity, datetime, progname, msg|
"#{datetime} #{msg}\n"
end
end
@log
end
end
Run Code Online (Sandbox Code Playgroud)
要在其他类之间重用,如下所示:
Class A
def self.log_path; 'log/a.log' end
def log_path; 'log/a.log' end
include MyLog
extend MyLog
def some_method
log.debug 'some thing'
end
def self.some_class_method
log.debug 'in a class method'
end
end
Run Code Online (Sandbox Code Playgroud)
是否比A类开始时的那四行短?
我想分批记录:
def expire
expired_ids = []
failed_ids = []
all.each do |event|
if event.expire # saves record
expired_ids << event.id
else
failed_ids << event.id
end
end
log.debug "These ids were expired: #{ expired_ids }"
log.debug "These ids failed to expire: #{ failed_ids }"
end
Run Code Online (Sandbox Code Playgroud)
有没有办法我可以干净地做到这一点?将日志记录与方法逻辑分开?
这是我最近遇到类似您的问题时一直在做的事情:
class A
class << self
include MyLog
def log_path
'log/a.log'
end
end
delegate :log_path, :log, to: "self.class"
end
Run Code Online (Sandbox Code Playgroud)
否则,选择最佳的编程方法取决于您的情况,重用脚本的频率,在脚本的生命周期中必须重构脚本的次数等等。但是无论如何,请不要试图保存代码行,而是在下次自己阅读代码时尝试避免麻烦。
关于第二个问题,您面临的主要难题是,是否值得引入“事件”类:
class Events < Array
def foobar
each_with_object [[], []] do |event, (expired_ids, failed_ids)|
( event.expire ? expired_ids : failed_ids ) << event.id
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后,当时间到了:
def expire
expired_ids, failed_ids = Events[ all ].foobar
log.debug "These ids were expired: #{ expired_ids }"
log.debug "These ids failed to expire: #{ failed_ids }"
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1483 次 |
| 最近记录: |