You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							44 lines
						
					
					
						
							1.7 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							44 lines
						
					
					
						
							1.7 KiB
						
					
					
				
								module SemanticLogger
							 | 
						|
								  class Base
							 | 
						|
								    # Log message at the specified level
							 | 
						|
								    def log_internal(level, index, message = nil, payload = nil, exception = nil)
							 | 
						|
								      # Handle variable number of arguments by detecting exception object and payload hash.
							 | 
						|
								      if exception.nil? && payload.nil? && message.respond_to?(:backtrace) && message.respond_to?(:message)
							 | 
						|
								        exception = message
							 | 
						|
								        message   = nil
							 | 
						|
								      elsif exception.nil? && payload && payload.respond_to?(:backtrace) && payload.respond_to?(:message)
							 | 
						|
								        exception = payload
							 | 
						|
								        payload   = nil
							 | 
						|
								      elsif message && !message.is_a?(String)
							 | 
						|
								        payload = message
							 | 
						|
								        message = 'payload is'
							 | 
						|
								      end
							 | 
						|
								
							 | 
						|
								      log = Log.new(name, level, index)
							 | 
						|
								      should_log =
							 | 
						|
								        if exception.nil? && payload.nil? && message.is_a?(Hash)
							 | 
						|
								          # All arguments as a hash in the message.
							 | 
						|
								          log.assign(**log.extract_arguments(message))
							 | 
						|
								        elsif exception.nil? && message && payload && payload.is_a?(Hash)
							 | 
						|
								          # Message supplied along with a hash with the remaining arguments.
							 | 
						|
								          log.assign(**log.extract_arguments(payload, message))
							 | 
						|
								        else
							 | 
						|
								          # All fields supplied directly.
							 | 
						|
								          log.assign(message:, payload:, exception:)
							 | 
						|
								        end
							 | 
						|
								
							 | 
						|
								      # Add result of block to message or payload if not nil
							 | 
						|
								      if block_given?
							 | 
						|
								        result = yield(log)
							 | 
						|
								        if result.is_a?(String)
							 | 
						|
								          log.message = log.message.nil? ? result : "#{log.message} -- #{result}"
							 | 
						|
								        elsif result.is_a?(Hash)
							 | 
						|
								          log.assign_hash(result)
							 | 
						|
								        end
							 | 
						|
								      end
							 | 
						|
								
							 | 
						|
								      # Log level may change during assign due to :on_exception_level
							 | 
						|
								      self.log(log) if should_log && should_log?(log)
							 | 
						|
								    end
							 | 
						|
								  end
							 | 
						|
								end
							 |