/// <inheritdoc />
        public void Log(LogEvent @event)
        {
            if (@event == null)
            {
                return;
            }

            var str = LogEventFormatter.Format(@event, settings.OutputTemplate, settings.FormatProvider);

            lock (Sync)
            {
                if (settings.ColorsEnabled && consoleFeaturesDetector.AreColorsSupported)
                {
                    if (!settings.ColorMapping.TryGetValue(@event.Level, out var color))
                    {
                        color = ConsoleColor.Gray;
                    }

                    using (consoleColorChanger.ChangeColor(color))
                        System.Console.Out.Write(str);
                }
                else
                {
                    System.Console.Out.Write(str);
                }
            }
        }
        public void Should_correctly_render_events_using_provided_template()
        {
            var template = OutputTemplate.Parse("{Level} {Message}");

            var @event = new LogEvent(LogLevel.Warn, DateTimeOffset.Now, "Hello, {User}!")
                         .WithProperty("User", "Vostok");

            var result = LogEventFormatter.Format(@event, template);

            result.Should().Be("WARN  Hello, Vostok!");

            Console.Out.WriteLine(result);
        }
Example #3
0
        private string RenderLogEventColumn(LogEvent logEvent)
        {
            if (ColumnOptions.LogEvent.ExcludeAdditionalProperties)
            {
                var filteredProperties = logEvent.Properties.Where(p => !AdditionalColumnNames.Contains(p.Key));
                logEvent = new LogEvent(logEvent.Timestamp, logEvent.Level, logEvent.Exception, logEvent.MessageTemplate, filteredProperties.Select(x => new LogEventProperty(x.Key, x.Value)));
            }

            var sb = new StringBuilder();

            using (var writer = new System.IO.StringWriter(sb))
                LogEventFormatter.Format(logEvent, writer);
            return(sb.ToString());
        }
Example #4
0
        public void Log(LogEvent logEvent)
        {
            if (logEvent == null)
            {
                return;
            }
            if (logEvent.Exception is ApiRequestException)
            {
                return;
            }

            var sourceContext = LoggerSetup.GetSourceContext(logEvent);
            var renderedEvent = LogEventFormatter.Format(logEvent, OutputTemplate).EscapeMarkdown();
            var message       = $"{logEvent.Level} log message from *{sourceContext}*:\n\n```{renderedEvent}```";

            errorsBot.PostToChannel(message, ParseMode.Markdown);
        }
Example #5
0
        public static LoggingEvent TranslateEvent([NotNull] ILogger logger, [NotNull] LogEvent @event, bool useVostokTemplate = false)
        {
            var level   = TranslateLevel(@event.Level);
            var message = useVostokTemplate
                ? LogEventFormatter.Format(@event, Template)
                : LogMessageFormatter.Format(@event);
            var timestamp = @event.Timestamp.UtcDateTime;

            var loggingEvent = new LoggingEvent(typeof(Logger), logger.Repository, logger.Name, level, message, @event.Exception);

            FillProperties(loggingEvent, @event.Properties);

            // (iloktionov): Unfortunately, log4net's LoggingEvent does not have a constructor that allows to pass both structured exception and timestamp.
            // (iloktionov): Constructor with Exception parameter just uses DateTime.UtcNow for timestamp.
            // (iloktionov): Constructor with LoggingEventData only allows to pass exception string instead of exception object.
            // (iloktionov): So we take the first ctor and use some dirty expressions to set timestamp in private LoggingEventData instance.

            timestampSetter?.Invoke(loggingEvent, timestamp);

            return(loggingEvent);
        }
Example #6
0
        public void Log(LogEvent logEvent)
        {
            if (airlockClient == null || string.IsNullOrEmpty(routingKey))
            {
                return;
            }

            var logEventData = new LogEventData
            {
                Timestamp  = DateTimeOffset.UtcNow, // todo (spaceorc, 15.02.2018) возможно, надо сделать поле Timestamp в logEvent?
                Level      = logEvent.Level,
                Message    = LogEventFormatter.FormatMessage(logEvent.MessageTemplate, logEvent.MessageParameters),
                Exceptions = logEvent.Exception.Parse(), // todo (andrew, 17.01.2018): maybe truncate if serialized Exceptions list has size > 32 kb
                Properties = logEvent.Properties.ToDictionary(x => x.Key, x => x.Value.ToString())
            };

            // todo (spaceorc, 13.10.2017) make "host" constant somewhere in Vostok.Core/LogPropertyNames.cs
            logEventData.Properties["host"] = HostnameProvider.Get();

            airlockClient.Push(routingKey, logEventData, logEventData.Timestamp);
        }
Example #7
0
        public void Log(LogEvent @event)
        {
            if (@event is null)
            {
                return;
            }

            if (!IsEnabledFor(@event.Level))
            {
                return;
            }

            var logLevel = ConvertLogLevel(@event.Level);

            var message = settings.UseVostokTemplate
                ? LogEventFormatter.Format(@event, Template)
                : LogMessageFormatter.Format(@event);

            var state = new FormattedLogValues(message, Array.Empty <object>());

            logger.Log(logLevel, NullEventId, state, @event.Exception, MessageFormatter);
        }
Example #8
0
        public void Log(LogEvent @event)
        {
            if (@event is null)
            {
                return;
            }

            var logLevel = TranslateLogLevel(@event.Level);

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

            logger.Log(logLevel, NullEventId, new VostokLogEventWrapper(@event), @event.Exception, FormatMessage);

            string FormatMessage(VostokLogEventWrapper logEventWrapper, Exception ex)
            {
                return(settings.UseVostokTemplate
                    ? LogEventFormatter.Format(logEventWrapper.LogEvent, Template)
                    : LogMessageFormatter.Format(logEventWrapper.LogEvent));
            }
        }
Example #9
0
 public void WriteLogEvent(LogEventInfo eventInfo) =>
 LogEventFormatter.Format(eventInfo.Event, writer, eventInfo.Settings.OutputTemplate, eventInfo.Settings.FormatProvider);