public static RabbitLoggerError Parse(Exception exception)
        {
            if (exception == null)
            {
                return(null);
            }

            var error = new RabbitLoggerError()
            {
                Message    = exception.Message,
                StackTrace = exception.StackTrace,
                InnerError = Parse(exception.InnerException)
            };

            List <RabbitLoggerError> list = new List <RabbitLoggerError>();

            if (exception is AggregateException aggregateException)
            {
                foreach (var ex in aggregateException.InnerExceptions)
                {
                    list.Add(Parse(ex));
                }
            }
            error.InnerErrors = list.ToArray();

            return(error);
        }
示例#2
0
        /// <summary>
        /// 日志记录
        /// </summary>
        /// <typeparam name="TState"></typeparam>
        /// <param name="logLevel"></param>
        /// <param name="eventId"></param>
        /// <param name="state"></param>
        /// <param name="exception"></param>
        /// <param name="formatter"></param>
        public void Log <TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func <TState, Exception, string> formatter)
        {
            if (string.IsNullOrEmpty(ip))
            {
                lock (ip)
                {
                    if (string.IsNullOrEmpty(ip))
                    {
                        ip = GetLocalIp();
                    }
                }
            }
            if (IsEnabled(logLevel))
            {
                var message = new RabbitLoggerMessage <TState>
                {
                    Error           = RabbitLoggerError.Parse(exception),
                    LogLevel        = logLevel,
                    State           = state,
                    Message         = formatter?.Invoke(state, exception),
                    Category        = category,
                    ApplicationName = loggerOptions.ApplicationName,
                    Time            = DateTime.Now,
                    IpAddress       = ip,
                };

                try
                {
                    var producer = rabbitLoggerProvider.RentProducer();
                    //发送消息
                    if (loggerOptions.Type == RabbitExchangeType.None)
                    {
                        producer.Publish(loggerOptions.Queue, JsonConvert.SerializeObject(message), new QueueOptions()
                        {
                            Arguments  = loggerOptions.Arguments,
                            AutoDelete = loggerOptions.AutoDelete,
                            Durable    = loggerOptions.Durable
                        });
                    }
                    else
                    {
                        producer.Publish(loggerOptions.Exchange, category, JsonConvert.SerializeObject(message), new ExchangeQueueOptions()
                        {
                            Type        = loggerOptions.Type,
                            RouteQueues = loggerOptions.RouteQueues,
                            Arguments   = loggerOptions.Arguments,
                            AutoDelete  = loggerOptions.AutoDelete,
                            Durable     = loggerOptions.Durable
                        });
                    }
                    rabbitLoggerProvider.ReturnProducer(producer);
                }
                catch (Exception ex)
                {
                    do
                    {
                        Console.WriteLine(ex.Message + Environment.NewLine + ex.StackTrace);
                    } while ((ex = ex.InnerException) != null);
                };
            }
        }