Пример #1
0
        private async Task <(Microsoft.Extensions.Logging.LogLevel logLevel, ISlackNotificationsSender sender)> InitSender(
            Microsoft.Extensions.Logging.LogLevel level,
            SlackNotificationsSerializer serializer,
            [NotNull] string azureQueueConnectionString,
            [NotNull] string azureQueuesBaseName)
        {
            return(await Task.Run(() =>
            {
                var azureQueuePublisher = new AzureQueuePublisher <SlackMessageQueueEntity>(
                    LogFactory.LastResort,
                    serializer,
                    $"Slack log [{level}]",
                    new AzureQueueSettings
                {
                    ConnectionString = azureQueueConnectionString,
                    QueueName = $"{azureQueuesBaseName}-{level}"
                },
                    fireNForgetQueueExistenceCheck: true)
                                          .Start();

                var sender = new SlackNotificationsSender(azureQueuePublisher, ownQueue: true);

                return (level, sender);
            }));
        }
Пример #2
0
        public SlackLogEntriesSender(
            [NotNull] string azureQueueConnectionString,
            [NotNull] string azureQueuesBaseName)
        {
            if (azureQueuesBaseName == null)
            {
                throw new ArgumentNullException(nameof(azureQueuesBaseName));
            }

            var senders    = new Dictionary <Microsoft.Extensions.Logging.LogLevel, ISlackNotificationsSender>();
            var serializer = new SlackNotificationsSerializer();

            var initLogsTasks = LogLevels.All.SelectAsync(p =>
                                                          InitSender(p, serializer, azureQueueConnectionString, azureQueuesBaseName));

            Task.WhenAll(initLogsTasks);

            foreach (var levelSenderTuple in initLogsTasks.Result)
            {
                senders.Add(levelSenderTuple.logLevel, levelSenderTuple.sender);
            }

            _senders = new ReadOnlyDictionary <Microsoft.Extensions.Logging.LogLevel, ISlackNotificationsSender>(senders);
        }