【问题标题】:How do add class name and method to rails logger如何将类名和方法添加到rails logger
【发布时间】:2020-03-20 15:05:44
【问题描述】:

我有一个 Rails 应用程序,我想向其中添加自定义日志格式化程序。在日志中,我想动态显示调用代码的类和调用它的方法。我在Rails Logger docs 中没有看到直接的方法来做到这一点。目前,在我的应用程序中的类的初始化方法中,我正在使用@logger = self.progname 来获取类,并使用@logger.level("#{__callee__}: some message" 来获取方法。

我可以编写一个自定义日志记录类并将其分配给.../config/environments/production.rb 中的config.log_formatter,这很好。如何添加一个格式化程序,当我记录内容时,它会动态地告诉我使用的是什么类和方法?

【问题讨论】:

    标签: ruby-on-rails ruby logging


    【解决方案1】:

    我会假设该类将由self 对象反映,尽管这可能很棘手。我认为通常您需要 self 类,作为实例方法,但对于单例(类)方法,您需要 self

    所以你可以使用

    self.kind_of?(Class) ? self.name : self.class.name
    

    看起来您已经在使用__callee__ 来获取方法。

    【讨论】:

    • 你并不严格需要上面的self.,但我认为这段代码比kind_of?(Class) ? name : self.class.name更清晰。
    • 目标是这样我不需要在每个类中定义它,而是在 ../config/environments/production.rb 文件(或更合适的位置)中定义它,这样当 rails 完成其初始化过程时,日志格式化程序已经知道每次我记录一些东西时都要获取类和方法。类似于 this personsource_class 所做的事情,尽管 binding_of_caller 仅建议用于调试
    • 我找到了一种方法来获得对我有用的课程。他们使用binding_of_caller gem 来获取类名。然后他们使用自定义日志格式化程序将其写出。 medium.com/@yuliaoletskaya/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多