Exemplo n.º 1
0
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            var objState = State;

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

            if (formatter == null)
            {
                throw new ArgumentNullException(nameof(formatter));
            }

            var timestamp = _timestampGetter();
            var message   = FormatState(state, exception, formatter);
            var logScope  = objState.ScopeProvider;

            var sb = stringBuilder;

            stringBuilder = null;
            if (sb == null)
            {
                sb = new StringBuilder();
            }

            objState.TextBuilder.BuildEntryText(sb, CategoryName, logLevel, eventId, message, exception, logScope, timestamp);

            if (sb.Length > 0)
            {
                var entry = CreateLogEntry();

                entry.Text      = sb.ToString();
                entry.Timestamp = timestamp;

                _processor.Enqueue(objState.FileName, entry);
            }

            sb.Clear();
            if (sb.Capacity > 1024)
            {
                sb.Capacity = 1024;
            }

            stringBuilder = sb;
        }