Example #1
0
        /// <inheritdoc/>
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception?exception, Func <TState, Exception?, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            ICollection <object>?Scopes = null;
            LoggerGroup?         Group  = null;

            ScopeProvider?.ForEachScope(
                (scope, state) =>
            {
                if (scope is LoggerGroup LoggerGroup)
                {
                    if (Group == null || LoggerGroup.Priority >= Group.Priority)
                    {
                        Group = LoggerGroup;
                    }
                    return;
                }
                if (Scopes == null)
                {
                    Scopes = new Collection <object>();
                }
                Scopes.Add(scope);
            },
                state);

            _AddMessageAction(
                LoggerJsonMessage.FromLoggerData(Group?.GroupName, _CategoryName, Scopes, logLevel, eventId, state, exception, formatter));
        }
 private void SerializeMessageToJson(LoggerJsonMessage message)
 {
     using (Utf8JsonWriter Writer = new Utf8JsonWriter(_Buffer))
     {
         try
         {
             JsonSerializer.Serialize(Writer, message, _JsonOptions);
         }
         catch (JsonException JsonException)
         {
             JsonSerializer.Serialize(
                 Writer,
                 new LoggerJsonMessage
             {
                 LogLevel     = message.LogLevel,
                 TimestampUtc = message.TimestampUtc,
                 ThreadId     = message.ThreadId,
                 EventId      = message.EventId,
                 GroupName    = message.GroupName,
                 CategoryName = message.CategoryName,
                 Content      = $"Message with Content [{message.Content}] contained data that could not be serialized into Json.",
                 Exception    = LoggerJsonMessageException.FromException(JsonException)
             },
                 _JsonOptions);
         }
     }
     _Buffer.WriteToStream(_OutputStream);
     _Buffer.Clear();
     _OutputStream.Write(s_NewLine, 0, s_NewLine.Length);
     _OutputStream.Flush();
 }
Example #3
0
        private string SerializeMessageToJson(LoggerJsonMessage message)
        {
            try
            {
                return(JsonSerializer.Serialize(message, _JsonOptions));
            }
#pragma warning disable CA1031 // Do not catch general exception types
            catch (Exception JsonException)
#pragma warning restore CA1031 // Do not catch general exception types
            {
                return(JsonSerializer.Serialize(
                           new LoggerJsonMessage
                {
                    LogLevel = message.LogLevel,
                    TimestampUtc = message.TimestampUtc,
                    ThreadId = message.ThreadId,
                    EventId = message.EventId,
                    GroupName = message.GroupName,
                    CategoryName = message.CategoryName,
                    Content = $"Message with Content [{message.Content}] contained data that could not be serialized into Json.",
                    Exception = LoggerJsonMessageException.FromException(JsonException)
                },
                           _JsonOptions));
            }
        }
        private void AddMessage(LoggerJsonMessage message)
        {
            if (string.IsNullOrWhiteSpace(message.GroupName))
            {
                message.GroupName = _LoggerGroupCache !.ResolveGroupNameForCategoryName(message.CategoryName);
            }

            _Messages.Enqueue(message);
            _MessageReadyHandle.Set();
        }
Example #5
0
        /// <inheritdoc/>
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception?exception, Func <TState, Exception?, string> formatter)
        {
            if (!IsEnabled(logLevel))
            {
                return;
            }

            _MessageManager.AddMessage(
                LoggerJsonMessage.FromLoggerData(_CategoryName, ScopeProvider, logLevel, eventId, state, exception, formatter));
        }
Example #6
0
        /// <summary>
        /// Adds a message to be displayed.
        /// </summary>
        /// <param name="message"><see cref="LoggerJsonMessage"/>.</param>
        /// <param name="token">Optional <see cref="CancellationToken"/>.</param>
        public void AddMessage(LoggerJsonMessage message, CancellationToken token = default)
        {
            ChannelWriter <LoggerJsonMessage> Writer = Messages.Writer;

            while (Writer.WaitToWriteAsync(token).GetAwaiter().GetResult())
            {
                if (Writer.TryWrite(message))
                {
                    return;
                }
            }

            throw new InvalidOperationException("MessageManager has closed.");
        }
Example #7
0
            public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception?exception, Func <TState, Exception?, string> formatter)
            {
                ICollection <object>?Scopes = null;

                _ScopeProvider.ForEachScope(
                    (scope, state) =>
                {
                    if (Scopes == null)
                    {
                        Scopes = new Collection <object>();
                    }
                    Scopes.Add(scope);
                },
                    state);

                Message = LoggerJsonMessage.FromLoggerData(null, "Category", Scopes, logLevel, eventId, state, exception, formatter);
            }
        /// <summary>
        /// Adds a message to be displayed.
        /// </summary>
        /// <param name="message"><see cref="LoggerJsonMessage"/>.</param>
        /// <param name="token">Optional <see cref="CancellationToken"/>.</param>
        public void AddMessage(LoggerJsonMessage message, CancellationToken token = default)
        {
            ChannelWriter <LoggerJsonMessage> Writer = Messages.Writer;

            while (true)
            {
                ValueTask <bool> Task = Writer.WaitToWriteAsync(token);
                if (!(Task.IsCompleted ? Task.Result : Task.AsTask().GetAwaiter().GetResult()))
                {
                    break;
                }

                if (Writer.TryWrite(message))
                {
                    return;
                }
            }

            throw new InvalidOperationException("MessageManager has closed.");
        }
Example #9
0
            public void SerializeMessageToJson(LoggerJsonMessage message, Stream stream)
            {
                try
                {
                    _Writer.Reset();

                    try
                    {
                        JsonSerializer.Serialize(_Writer, message, _Options);
                    }
                    catch (JsonException JsonException)
                    {
                        JsonSerializer.Serialize(
                            _Writer,
                            new LoggerJsonMessage
                        {
                            LogLevel     = message.LogLevel,
                            TimestampUtc = message.TimestampUtc,
                            ThreadId     = message.ThreadId,
                            EventId      = message.EventId,
                            GroupName    = message.GroupName,
                            CategoryName = message.CategoryName,
                            Content      = $"Message with Content [{message.Content}] contained data that could not be serialized into Json.",
                            Exception    = LoggerJsonMessageException.FromException(JsonException)
                        },
                            _Options);
                    }
                    finally
                    {
                        LoggerJsonMessage.Return(message);
                    }

                    _Buffer.WriteToStream(stream);
                    stream.Write(s_NewLine, 0, s_NewLine.Length);
                    stream.Flush();
                }
                finally
                {
                    _Buffer.Clear();
                }
            }
Example #10
0
 public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception?exception, Func <TState, Exception?, string> formatter)
 => Message = LoggerJsonMessage.FromLoggerData("Category", _ScopeProvider, logLevel, eventId, state, exception, formatter);