有时我发现自己需要将上下文附加到特定范围,一旦范围退出就释放它,例如。
User.all do |u|
custom_logger.with_context({ user_id: u.id }) do
# .. some code
custom_logger.warn('something happened')
# .. some more code
end
end
你会在rails中看到这种模式,例如
I18n.with_locale(...) do
# some code
end
我想要一个类似的行为,但是一旦我退出当前范围,就会发生清理,例如
User.all do |u|
custom_logger.set_scoped_context({ user_id: u.id })
# .. some code
custom_logger.warn('something happened')
# .. some more code
end
在上面的代码中,我希望行为与前面的示例类似,但是上下文的作用域是周围的范围。
红宝石可以达到这个目的吗?
答案 0 :(得分:0)
改变全局状态并期望一些隐藏的抽象来清理/重置状态非常容易出错。如果您不喜欢块样式,我建议使用当前上下文创建一个新的记录器,而不是更改全局状态:
User.all do |u|
scoped_logger = custom_logger.with_context({ user_id: u.id })
# .. some code
scoped_logger.warn('something happened')
# .. some more code
end