/// <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(); }
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); }
public LykkeLogToAzureStorage SetSlackNotificationsManager(ILykkeLogToAzureSlackNotificationsManager notificationsManager) { _slackNotificationsManager = notificationsManager; return(this); }
public LykkeLogToAzureStorageTests() { _persistenceManagerMock = Substitute.For <ILykkeLogToAzureStoragePersistenceManager>(); _slackNotificationsManagerMock = Substitute.For <ILykkeLogToAzureSlackNotificationsManager>(); }