Example #1
0
        /// <summary>
        /// Logs a message and/or exception with the specified <see cref="LogLevel"/>, <see cref="LogEventId"/>
        /// and properties.
        /// </summary>
        /// <param name="logger">The <see cref="ILogger"/>.</param>
        /// <param name="level">The <see cref="LogLevel"/>.</param>
        /// <param name="id">The unique identifier of the log event.</param>
        /// <param name="exception">The <see cref="Exception"/> that occured, may be <c>null</c>.</param>
        /// <param name="format">The format of the log message.</param>
        /// <param name="args">The format arguments used to format the message.</param>
        public static void Log(
            this ILogger logger,
            LogLevel level,
            LogEventId id,
            Exception exception,
            string format,
            params object[] args)
        {
            Ensure.Arg.NotNull(logger, nameof(logger));

            if (logger.IsEnabled(level))
            {
                LogMessageTemplate template = LogMessageTemplateCache.Get(format);
                if (template.VariableNames.Count != args?.Length)
                {
                    throw new ArgumentException(
                              "Number of arguments does not match the number of format variables.",
                              nameof(args));
                }

                IReadOnlyList <LogProperty> properties = args?.Length == 0
                    ? LogMessageProperties.Empty
                    : new LogMessageProperties(template, args);

                Log(logger, level, id, exception, template, properties);
            }
        }
Example #2
0
 /// <summary>
 /// Logs a <see cref="LogLevel.Trace"/> message and exception with the specified <see cref="LogEventId"/>
 /// and properties.
 /// </summary>
 /// <param name="logger">The <see cref="ILogger"/>.</param>
 /// <param name="id">The unique identifier of the log event.</param>
 /// <param name="exception">The <see cref="Exception"/> that occured, may be <c>null</c>.</param>
 /// <param name="format">The format of the log message.</param>
 /// <param name="args">The format arguments used to format the message.</param>
 public static void LogTrace(
     this ILogger logger,
     LogEventId id,
     Exception exception,
     string format,
     params object[] args)
 {
     Log(logger, LogLevel.Trace, id, exception, format, args);
 }
Example #3
0
        /// <summary>
        /// Defines a delegate which writes log event without any properties.
        /// </summary>
        /// <param name="level">The <see cref="LogLevel"/>.</param>
        /// <param name="id">The <see cref="LogEventId"/> which uniquely identifies the event.</param>
        /// <param name="format">The log message format.</param>
        /// <returns>The delegate which must be invoked to write the log event.</returns>
        /// <exception cref="ArgumentNullException">Argument <paramref name="format"/> is <c>null</c>.</exception>
        public static LoggerEventDelegate Define(LogLevel level, LogEventId id, string format)
        {
            LogMessageTemplate template = CreateTemplate(format, 0);

            return((logger, exception, properties) =>
            {
                if (logger.IsEnabled(level))
                {
                    logger.Log(level, id, exception, template, properties);
                }
            });
        }
Example #4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LogEvent"/> struct.
 /// </summary>
 /// <param name="timestamp">The timestamp of the event.</param>
 /// <param name="level">The log level of the event</param>
 /// <param name="id">The unique identifier of the event</param>
 /// <param name="messageTemplate">The <see cref="LogMessageTemplate"/> used to render the event.</param>
 /// <param name="properties">The properties that are logged.</param>
 /// <param name="exception">The <see cref="System.Exception"/> that will be logged.</param>
 public LogEvent(
     DateTimeOffset timestamp,
     LogLevel level,
     LogEventId id,
     LogMessageTemplate messageTemplate,
     IReadOnlyList <LogProperty> properties = null,
     Exception exception = null
     )
 {
     Timestamp       = timestamp;
     Level           = level;
     Id              = id;
     MessageTemplate = messageTemplate ?? LogMessageTemplate.Empty;
     Properties      = properties ?? LogMessageProperties.Empty;
     Exception       = exception;
 }
Example #5
0
        /// <summary>
        /// Defines a delegate which writes log event with two properties.
        /// </summary>
        /// <param name="level">The <see cref="LogLevel"/>.</param>
        /// <param name="id">The <see cref="LogEventId"/> which uniquely identifies the event.</param>
        /// <param name="format">The log message format.</param>
        /// <returns>The delegate which must be invoked to write the log event.</returns>
        /// <exception cref="ArgumentNullException">Argument <paramref name="format"/> is <c>null</c>.</exception>
        /// <exception cref="ArgumentException">Number of format variables is less than the number of arguments.</exception>
        public static LoggerEventDelegate <T0, T1> Define <T0, T1>(LogLevel level, LogEventId id, string format)
        {
            LogMessageTemplate template = CreateTemplate(format, 2);

            return((logger, arg0, arg1, exception, properties) =>
            {
                if (logger.IsEnabled(level))
                {
                    logger.Log(
                        level,
                        id,
                        exception,
                        template,
                        new LogMessageProperties <T0, T1>(template, arg0, arg1, properties));
                }
            });
        }
 private void Log_With_Args_Logs_Event_WithoutException(
     Action <ILogger, LogEventId, string, object[]> logMethod,
     LogLevel level,
     LogEventId eventId,
     string format,
     object[] args,
     LogProperty[] expectedProperties)
 {
     Log_With_Args_Logs_Event(
         (logger1, eventId1, exception, format1, args1) => logMethod(logger1, eventId1, format1, args1),
         level,
         eventId,
         null,
         format,
         args,
         expectedProperties);
 }
Example #7
0
 internal static void Log(
     this ILogger logger,
     LogLevel level,
     LogEventId id,
     Exception exception,
     LogMessageTemplate messageTemplate,
     IReadOnlyList <LogProperty> properties)
 {
     logger.Log(
         new LogEvent(
             GetTimestamp(),
             level,
             id,
             messageTemplate,
             properties,
             exception));
 }
        private void Log_With_Args_Logs_Event(
            Action <ILogger, LogEventId, Exception, string, object[]> logMethod,
            LogLevel level,
            LogEventId eventId,
            Exception exception,
            string format,
            object[] args,
            LogProperty[] expectedProperties)
        {
            logMethod(_logger, eventId, exception, format, args);

            _logger.Received()
            .Log(
                Arg.Is <LogEvent>(
                    @event =>
                    @event.Timestamp == Timestamp &&
                    @event.Level == level &&
                    @event.Id == eventId &&
                    @event.Exception == exception &&
                    @event.MessageTemplate.Format == format &&
                    @event.Properties.SequenceEqual(expectedProperties, EqualityComparer <LogProperty> .Default)
                    ));
        }
Example #9
0
 /// <summary>
 /// Logs a <see cref="LogLevel.Critical"/> message with the specified <see cref="LogEventId"/> and properties.
 /// </summary>
 /// <param name="logger">The <see cref="ILogger"/>.</param>
 /// <param name="id">The unique identifier of the log event.</param>
 /// <param name="format">The format of the log message.</param>
 /// <param name="args">The format arguments used to format the message.</param>
 public static void LogCritical(this ILogger logger, LogEventId id, string format, params object[] args)
 {
     Log(logger, LogLevel.Critical, id, null, format, args);
 }
Example #10
0
 /// <summary>
 /// Logs a <see cref="LogLevel.Warning"/> message with the specified <see cref="LogEventId"/> and properties.
 /// </summary>
 /// <param name="logger">The <see cref="ILogger"/>.</param>
 /// <param name="id">The unique identifier of the log event.</param>
 /// <param name="format">The format of the log message.</param>
 /// <param name="args">The format arguments used to format the message.</param>
 public static void LogWarning(this ILogger logger, LogEventId id, string format, params object[] args)
 {
     Log(logger, LogLevel.Warning, id, null, format, args);
 }