gpt4 book ai didi

ruby - 获取调用者类

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:39 25 4
gpt4 key购买 nike

我在写 Logger 时遇到了自动添加类名的问题,我从中调用了 print_log 方法。例如这样的事情:

class Logger
def self.print_log(string)
puts Time.now.strftime('%T | ') + *caller_class_name_here* + ' - ' + string
end
end

class MyClass
def initialize
Logger.print_log 'called .new() method'
end
end

作为调用 MyClass.new 方法的结果,我想在输出中看到:

14:41:23 | MyClass - called .new() method

我确定可以使用caller,但还找不到方法

最佳答案

你可以像那样使用模块(Rails 风格):

module Loggable
extend ActiveSupport::Concern

def log_prefix
@log_prefix ||= (self.class == Class ? "#{self.to_s}" : "#{self.class.to_s}").freeze
end

included do
[:debug, :info, :warn, :error, :fatal].each do |level|
define_method level do |str = nil|
caller = caller_locations(1,1)[0].label
prefix = "[#{log_prefix}##{caller}] "
prefix << level.to_s.upcase[0]
str = "#{prefix}: #{str}"
puts str if ENV["DEBUG"]
Rails.logger.send(level, str)
end
end
end
end

你的代码将是:

class MyClass
include Loggable
extend Loggable

def instance_method
debug "Hello"
end

def self.klass_method
debug "Klass"
end
end

关于ruby - 获取调用者类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19679969/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com