Exemplo n.º 1
0
        /// <summary>
        /// Gets a JSON string for properties from the log message's state and any active scopes.
        /// </summary>
        /// <param name="state">The state from the log message.</param>
        /// <param name="provider">The <see cref="LoupeLoggerProvider"/>.</param>
        /// <typeparam name="T">The type of the state object</typeparam>
        /// <returns>A JSON string.</returns>
        public static string GetJson <T>(T state, LoupeLoggerProvider provider)
        {
            var propertySet             = HashSetPool.Get();
            ByteBufferWriter buffer     = null;
            Utf8JsonWriter   jsonWriter = null;

            try
            {
                // Write state first
                WriteState(state, propertySet, ref buffer, ref jsonWriter);

                // Write any values from active scopes
                WriteScope(provider, propertySet, ref jsonWriter, ref buffer);

                if (!(jsonWriter is null))
                {
                    jsonWriter.WriteEndObject();
                    jsonWriter.Flush();
                    return(buffer.OutputAsString);
                }
            }
            finally
            {
                HashSetPool.Return(propertySet);
                if (!(jsonWriter is null))
                {
                    jsonWriter.Dispose();
                    buffer.Dispose();
                }
            }

            return(null);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="LoupeLoggerScope"/> class.
        /// </summary>
        /// <param name="provider">The <see cref="LoupeLoggerProvider"/>.</param>
        /// <param name="state">The state.</param>
        public LoupeLoggerScope(LoupeLoggerProvider provider, object state)
        {
            _provider = provider;
            _state    = state;

            // Replace the current scope
            _parent = provider.CurrentScope;
            provider.CurrentScope = this;
        }
Exemplo n.º 3
0
        private static void WriteScope(LoupeLoggerProvider provider, HashSet <string> propertySet, ref Utf8JsonWriter jsonWriter, ref ByteBufferWriter buffer)
        {
            if (provider.CurrentScope is null)
            {
                return;
            }

            if (jsonWriter is null)
            {
                buffer     = new ByteBufferWriter();
                jsonWriter = new Utf8JsonWriter(buffer);
                jsonWriter.WriteStartObject();
            }
            provider.CurrentScope.Enrich(jsonWriter, propertySet);
        }
Exemplo n.º 4
0
 /// <summary>
 /// Initializes a new instance of the <see cref="LoupeLogger"/> class.
 /// </summary>
 public LoupeLogger(LoupeLoggerProvider provider, string category)
 {
     _provider = provider;
     _category = category;
 }