def _p(caller, *args)
      file, line = caller[0].split(":")
      file_rel = begin
        Pathname(file).relative_path_from(conf.root_path)
      rescue ArgumentError
        # If `file` is "" or other non-path, `relative_path_from` will raise an error.
        # Fall back to original value then.
        file
      end

      args.each do |arg|
        value = case arg
        when String
          arg
        else
          arg.inspect
        end

        msg = "[DT #{file_rel}:#{line}] #{value}"

        # Fire!
        dt_logger.debug(msg) if dt_logger
        if rails_logger
          rails_logger.debug(msg)
          stderr.puts(msg) if stderr && !rails_console?
        else
          stderr.puts(msg) if stderr
        end
      end

      # Be like `puts`.
      nil
    end
def _p(caller, *args)
      file, line = caller[0].split(":")
      file_rel = begin
        Pathname(file).relative_path_from(conf.root_path)
      rescue ArgumentError
        # If `file` is "" or other non-path, `relative_path_from` will raise an error.
        # Fall back to original value then.
        file
      end

      args.each do |arg|
        value = case arg
        when String
          arg
        else
          arg.inspect
        end

        msg = "[DT #{file_rel}:#{line}] #{value}"

        # Fire!
        dt_logger.debug(msg) if dt_logger
        if rails_logger
          rails_logger.debug(msg)
          stderr.puts(msg) if stderr && !rails_console?
        else
          stderr.puts(msg) if stderr
        end
      end

      # Be like `puts`.
      nil
    end
--------------------------------------- Actions
 Lower level implementation of <tt>p</tt>.

 * Print to {#dt_logger} if one is available.
 * Print to {#rails_logger} if one is available.
 * Print to {#stderr} if not running in {#rails_console?}.

 @param caller [Array<Array<file, line>>]
 @return nil
 @see DT.p