/// <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); } }
/// <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); }
/// <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); } }); }
/// <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; }
/// <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); }
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) )); }
/// <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); }
/// <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); }