示例#1
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception,
                                 Func <TState, Exception, string> formatter)
        {
            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            if (!IsEnabled(logLevel))
            {
                return;
            }

            var message = new YadlMessage
            {
                Level            = (int)logLevel,
                LevelDescription = GetLogDescription(logLevel),
                Message          = formatter(state, exception),
                TimeStamp        = DateTimeOffset.Now
            };

            CompleteMessage(message);

            //Assume always gonna be true because it's unbounded channel
            _ = _processor.ChannelWriter.TryWrite(message);
        }
示例#2
0
        private void ProcessFields(YadlMessage message, IDictionary <string, object?> fields)
        {
            var actualJson   = string.IsNullOrEmpty(message.ExtraFields) ? "{}" : message.ExtraFields;
            var fieldsAsJson = JsonSerializer.Serialize(fields, _options.JsonSerializerOptions);

            message.ExtraFields = JsonExtensions.Merge(actualJson, fieldsAsJson);
        }
示例#3
0
        private void CompleteMessage(YadlMessage message)
        {
            if (_options.GlobalFields.Count > 0)
            {
                ProcessFields(message, _options.GlobalFields);
            }

            var addFields = GetScopeAdditionalFields();

            if (addFields.Count > 0)
            {
                ProcessFields(message, addFields);
            }
        }