Esempio n. 1
0
        /// <inheritdoc />
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception,
                                 Func <TState, Exception, string> formatter)
        {
            // First we take care about output to console.
            if (consoleLogger.IsEnabled(logLevel))
            {
                consoleLogger.Log(logLevel, eventId, state, exception, (s, e) => { return(prefix + formatter(s, e)); });
            }

            // The rest of the method cares about logging via NLog to files.
            NLog.LogLevel nLogLevel = logLevel.ToNLogLevel();
            if (!IsEnabled(nLogLevel))
            {
                return;
            }

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

            string message = prefix + formatter(state, exception);

            LogEventInfo eventInfo = LogEventInfo.Create(nLogLevel, logger.Name, message);

            eventInfo.Exception = exception;
            logger.Log(wrapperType, eventInfo);
        }
Esempio n. 2
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));
            }

            NLog.LogLevel nLogLogLevel = logLevel.ToNLogLevel();
            bool          isLogging    = IsNlogEnabled(nLogLogLevel, _nloLogger);

            if (!isLogging && (exception == null || !_exceptionalWrapper.Enabled))
            {
                return;
            }

            bool isError = logLevel == LogLevel.Error || logLevel == LogLevel.Critical;

            Dictionary <string, string> customData = _logExtractor.GatherData(isError);

            Guid?guid = null;

            if (_exceptionalWrapper.Enabled && exception != null && (_filters == null || _filters.LogToOpserver(exception)))
            {
                guid = _httpContextWrapper.ExceptionalLog(exception, customData, _categoryName, _appName);
            }

            if (!isLogging)
            {
                return;
            }

            string message = formatter(state, exception);

            if (message == "[null]" && exception != null)
            {
                message = exception.Message;
            }

            // Log to NLog
            LogEventInfo eventInfo = CreateNlogEventInfo(eventId, exception, nLogLogLevel, message);

            // Get cutom data and inject
            AppendLuccaData(guid, eventInfo, _options, customData);

            _nloLogger.Log(eventInfo);
        }
Esempio n. 3
0
 /// <summary>
 /// Is logging enabled for this logger at this <paramref name="logLevel"/>?
 /// </summary>
 private static bool IsNlogEnabled(NLog.LogLevel logLevel, Logger nloLogger)
 => nloLogger.IsEnabled(logLevel);
Esempio n. 4
0
        private LogEventInfo CreateNlogEventInfo(EventId eventId, Exception exception, NLog.LogLevel nLogLogLevel, string message)
        {
            //message arguments are not needed as it is already checked that the loglevel is enabled.
            LogEventInfo eventInfo = LogEventInfo.Create(nLogLogLevel, _nloLogger.Name, message);

            eventInfo.Exception = exception;
            if (!_options.IgnoreEmptyEventId || eventId.Id != 0 || !string.IsNullOrEmpty(eventId.Name))
            {
                // Attempt to reuse the same string-allocations based on the current <see cref="NLogProviderOptions.EventIdSeparator"/>
                Tuple <string, string, string> eventIdPropertyNames = _eventIdPropertyNames ?? new Tuple <string, string, string>(null, null, null);
                string eventIdSeparator = _options.EventIdSeparator ?? string.Empty;
                if (!ReferenceEquals(eventIdPropertyNames.Item1, eventIdSeparator))
                {
                    // Perform atomic cache update of the string-allocations matching the current separator
                    eventIdPropertyNames = new Tuple <string, string, string>(
                        eventIdSeparator,
                        string.Concat("EventId", eventIdSeparator, "Id"),
                        string.Concat("EventId", eventIdSeparator, "Name"));
                    _eventIdPropertyNames = eventIdPropertyNames;
                }

                bool idIsZero = eventId.Id == 0;
                eventInfo.Properties[eventIdPropertyNames.Item2] = idIsZero ? _zeroEventId : eventId.Id;
                eventInfo.Properties[eventIdPropertyNames.Item3] = eventId.Name;
                eventInfo.Properties["EventId"] = idIsZero && eventId.Name == null ? _emptyEventId : eventId;
            }

            return(eventInfo);
        }
Esempio n. 5
0
 /// <summary>
 ///     Checks if the given log level is enabled.
 /// </summary>
 /// <param name="logLevel">Log level to check.</param>
 /// <returns><c>true</c> if the log level is enabled, <c>false</c> otherwise.</returns>
 private bool IsEnabled(NLog.LogLevel logLevel)
 {
     return(logger.IsEnabled(logLevel));
 }
Esempio n. 6
0
 /// <summary>
 ///     Checks if the given log level is enabled.
 /// </summary>
 /// <param name="logLevel">Log level to check.</param>
 /// <returns><c>true</c> if the log level is enabled, <c>false</c> otherwise.</returns>
 bool IsEnabled(NLog.LogLevel logLevel)
 {
     return(this.logger.IsEnabled(logLevel));
 }