Exemple #1
0
        /// <param name="applicationName">Application name</param>
        /// <param name="persistenceManager">Persistence manager</param>
        /// <param name="slackNotificationsManager">Slack notifications manager. Can be null</param>
        /// <param name="lastResortLog">Last resort log (e.g. Console), which will be used to log logging infrastructure's issues</param>
        /// <param name="maxBatchLifetime">Log entries batch's lifetime, when exceeded, batch will be saved, and new batch will be started. Default is 5 seconds</param>
        /// <param name="batchSizeThreshold">Log messages batch's size threshold, when exceeded, batch will be saved, and new batch will be started. Default is 100 entries</param>
        /// <param name="ownPersistenceManager">Is log instance owns persistence manager: should it manages Start/Stop</param>
        /// <param name="ownSlackNotificationsManager">Is log instance owns slack notifications manager: should it manages Start/Stop</param>
        public LykkeLogToAzureStorage(
            string applicationName,
            ILykkeLogToAzureStoragePersistenceManager persistenceManager,
            ILykkeLogToAzureSlackNotificationsManager slackNotificationsManager = null,
            ILog lastResortLog                = null,
            TimeSpan?maxBatchLifetime         = null,
            int batchSizeThreshold            = 100,
            bool ownPersistenceManager        = true,
            bool ownSlackNotificationsManager = true)
            : base(applicationName, periodMs: 20, log: lastResortLog ?? EmptyLog.Instance)
        {
            _persistenceManager           = persistenceManager;
            _slackNotificationsManager    = slackNotificationsManager;
            _lastResortLog                = lastResortLog;
            _batchSizeThreshold           = batchSizeThreshold;
            _ownPersistenceManager        = ownPersistenceManager;
            _ownSlackNotificationsManager = ownSlackNotificationsManager;
            _maxBatchLifetime             = maxBatchLifetime ?? TimeSpan.FromSeconds(5);

            _component = AppEnvironment.Name;

            DisableTelemetry();

            StartNewBatch();
        }
Exemple #2
0
        private static ILog CreateLogWithSlack(IConfiguration configuration, IServiceCollection services,
                                               IReloadingManager <AppSettings> settings, CorrelationContextAccessor correlationContextAccessor)
        {
            var consoleLogger   = new LogToConsole();
            var aggregateLogger = new AggregateLogger();

            aggregateLogger.AddLog(consoleLogger);

            #region Logs settings validation

            if (!settings.CurrentValue.TradingHistoryService.UseSerilog &&
                string.IsNullOrWhiteSpace(settings.CurrentValue.TradingHistoryService.Db.LogsConnString))
            {
                throw new Exception("Either UseSerilog must be true or LogsConnString must be set");
            }

            #endregion Logs settings validation

            // Creating slack notification service, which logs own azure queue processing messages to aggregate log
            ILykkeLogToAzureSlackNotificationsManager slackNotificationsManager = null;
            if (settings.CurrentValue.SlackNotifications != null)
            {
                var slackService = services.UseSlackNotificationsSenderViaAzureQueue(
                    new Lykke.AzureQueueIntegration.AzureQueueSettings
                {
                    ConnectionString = settings.CurrentValue.SlackNotifications.AzureQueue.ConnectionString,
                    QueueName        = settings.CurrentValue.SlackNotifications.AzureQueue.QueueName
                }, aggregateLogger);

                slackNotificationsManager = new LykkeLogToAzureSlackNotificationsManager(slackService, consoleLogger);
            }

            if (settings.CurrentValue.TradingHistoryService.UseSerilog)
            {
                aggregateLogger.AddLog(new SerilogLogger(typeof(Startup).Assembly, configuration, new List <ILogEventEnricher>()
                {
                    new CorrelationLogEventEnricher("CorrelationId", correlationContextAccessor)
                }));
            }
            else if (settings.CurrentValue.TradingHistoryService.Db.StorageMode == StorageMode.Azure)
            {
                var persistenceManager = new LykkeLogToAzureStoragePersistenceManager(
                    AzureTableStorage <LogEntity> .Create(settings.Nested(x => x.TradingHistoryService.Db.LogsConnString),
                                                          "TradingHistoryServiceLog", consoleLogger),
                    consoleLogger);

                // Creating azure storage logger, which logs own messages to concole log
                var azureStorageLogger = new LykkeLogToAzureStorage(
                    persistenceManager,
                    slackNotificationsManager,
                    consoleLogger);

                azureStorageLogger.Start();

                aggregateLogger.AddLog(azureStorageLogger);
            }
            else if (settings.CurrentValue.TradingHistoryService.Db.StorageMode == StorageMode.SqlServer)
            {
                var sqlLogger = new LogToSql(new SqlLogRepository("TradingHistoryAPIsLog",
                                                                  settings.CurrentValue.TradingHistoryService.Db.LogsConnString));

                aggregateLogger.AddLog(sqlLogger);
            }

            LogLocator.Log = aggregateLogger;

            return(aggregateLogger);
        }
Exemple #3
0
        public LykkeLogToAzureStorage SetSlackNotificationsManager(ILykkeLogToAzureSlackNotificationsManager notificationsManager)
        {
            _slackNotificationsManager = notificationsManager;

            return(this);
        }
Exemple #4
0
 public LykkeLogToAzureStorageTests()
 {
     _persistenceManagerMock        = Substitute.For <ILykkeLogToAzureStoragePersistenceManager>();
     _slackNotificationsManagerMock = Substitute.For <ILykkeLogToAzureSlackNotificationsManager>();
 }