def copy_with(message = nil, severity: nil, time: nil, progname: nil)
      self.class.new(
        message.nil? ? self.message : message,
        severity: severity.nil? ? self.severity : severity,
        time: time.nil? ? self.time : time,
        progname: progname.nil? ? self.progname : progname
      )
    end
def copy_with(message = nil, severity: nil, time: nil, progname: nil)
      self.class.new(
        message.nil? ? self.message : message,
        severity: severity.nil? ? self.severity : severity,
        time: time.nil? ? self.time : time,
        progname: progname.nil? ? self.progname : progname
      )
    end
@param message [String, #inspect] a message string
 @param severity [Integer] the numeric severity of the logged message
 @param time [Time] the timestamp of the logged message
 @param progname [String] the progname provided (or inferred) during
   logging of the message by the {Logger}.
 Create a new Message object based on the values in `self`, optionally
 overwriting any of the them.

 @param (see #initialize)
 @return [Message] a new Message