public void Info(string user, string message, LogAppender logAppender, bool canNotify = false) { bool canAppendWithSQL = logAppender == LogAppender.all || logAppender == LogAppender.sql; bool canAppendWithFILE = logAppender == LogAppender.all || logAppender == LogAppender.file; Action <ILogBase> log = x => x.Info(user, message); try { if (canAppendWithSQL) { log.Invoke(LogDB.GetLog(DbConnection)); } if (canAppendWithFILE) { if (string.IsNullOrEmpty(LoggingPathFile)) { throw new Exception("file path is empty."); } LogFile.GetLog(LoggingPathFile).Info(user, message); } } catch (Exception ex) { throw ex; } }
/// <summary> /// Add a LogAppender object to the List of LogAppender objects /// </summary> /// <param name="logAppender">The LogAppender object that should be added to the List of LogAppender objects</param> public void AddLogAppender(LogAppender logAppender) { if (logAppender == null) { throw new ArgumentNullException(nameof(logAppender)); } LogAppenders.Add(logAppender); }
public void Initialize() { container.RegisterInstance(coreLog = LogManager.GetLogger("CoreLog")); container.RegisterFrom <C>(); container.RegisterInstance <IKernel>(this); container.Intercept(x => x.ServiceType == typeof(IInvocationProxy), (sf, pd) => DefineProxyType(pd)); container.Register <DelayerInterceptor>(new PerContainerLifetime()); if (container.GetInstance <IConfigurationProvider>().Get(CoreConfiguration.Default).LogToFile) { appender = new LogAppender(container.GetInstance <IConfigurationProvider>()); BasicConfigurator.Configure(LogManager.GetRepository(), appender); } container.GetInstance <IProcessListStorage>().CleanList(); coreLog.Info(new string('=', 10)); coreLog.Debug($"Kernel initialized"); }
public static Log4NetLogger getInstance(LogAppender appender, string configPath) { LogBuffer.initBuffer(); switch (appender) { case LogAppender.APP_CORE: { if (Log4NetLogger.instanceManager == null) { Log4NetLogger.instanceManager = new Log4NetLogger(LogAppender.APP_CORE, configPath); } return(Log4NetLogger.instanceManager); } case LogAppender.APP_UI: { if (Log4NetLogger.instanceUi == null) { Log4NetLogger.instanceUi = new Log4NetLogger(LogAppender.APP_UI, configPath); } return(Log4NetLogger.instanceUi); } case LogAppender.APP_SETTINGS: { if (Log4NetLogger.instanceSettings == null) { Log4NetLogger.instanceSettings = new Log4NetLogger(LogAppender.APP_SETTINGS, configPath); } return(Log4NetLogger.instanceSettings); } default: //LogAppender.APP_DEFFAULT: { if (Log4NetLogger.instanceDefault == null) { Log4NetLogger.instanceDefault = new Log4NetLogger(LogAppender.APP_DEFFAULT, configPath); } return(Log4NetLogger.instanceDefault); } } }
/// <summary> Gets a logger. </summary> /// <param name="type"> The type. </param> /// <param name="logAppender"> (Optional) The <see cref="LogAppender" /> </param> /// <param name="className"> (Optional) The class name. </param> /// <returns> The logger. </returns> public static ILogger GetLogger(Type type, LogAppender logAppender = LogAppender.File | LogAppender.Console, string?className = null) { if (string.IsNullOrEmpty(className)) { className = !type.IsGenericType ? type.Name : Regex.Replace( type.Name, "`[0-9]+", string.Join(" ", type.GetGenericArguments().Select(v => v.Name))); } lock (s_typeLoggers) { if (!s_typeLoggers.TryGetValue(type, out Logger? logger)) { List <IAppender> appenders = new List <IAppender>(); if ((logAppender & LogAppender.File) == LogAppender.File) { appenders.Add(new FileAppender(className, LogDirectory, MaxQueueSize)); } if ((logAppender & LogAppender.Console) == LogAppender.Console) { appenders.Add(new ConsoleAppender(className)); } logger = new Logger(appenders.ToArray()); logger.PrepareLogging(DateTime.Now); s_typeLoggers.Add(type, logger); if (s_loggerCount + 1 >= s_loggers.Length) { Array.Resize(ref s_loggers, s_loggers.Length * 2); } s_loggers[s_loggerCount] = logger; s_loggerCount++; } return(logger); } }
/// <summary> Gets a logger. </summary> /// <typeparam name="T"> Generic type parameter. </typeparam> /// <param name="logAppender"> (Optional) The <see cref="LogAppender" /> </param> /// <param name="className"> (Optional) The class name. </param> /// <returns> The logger. </returns> public static ILogger GetLogger <T>(LogAppender logAppender = LogAppender.File | LogAppender.Console, string?className = null) where T : class { return(GetLogger(typeof(T), logAppender, className)); }
private Log4NetLogger(LogAppender appender, string configPath) { this.logAppender = appender; this.level = LogConfig.getLogLevel(configPath); }
public ArenaClientForm() { InitializeComponent(); MyIniParser = new IniParser(); string strWidth = MyIniParser.GetSetting(IniConstants.SECTION_SETTINGS, IniConstants.CLIENT_WINDOW_WIDTH, 800); string strHeight = MyIniParser.GetSetting(IniConstants.SECTION_SETTINGS, IniConstants.CLIENT_WINDOW_HEIGHT, 500); int width, height; if (int.TryParse(strWidth, out width)) this.Width = width; if (int.TryParse(strHeight, out height)) this.Height = height; LoginUserNameTextBox.Text = MyIniParser.GetSetting(IniConstants.SECTION_SETTINGS, IniConstants.CLIENT_LOGIN_NAME, string.Empty); //ServerAddressComboBox.Text = MyIniParser.GetSetting(IniConstants.SECTION_SETTINGS, IniConstants.CLIENT_SERVER_ADDRESS, "127.0.0.1:30000"); string[] serverList = MyIniParser.GetSetting(IniConstants.SECTION_SETTINGS, IniConstants.CLIENT_SERVER_LIST, string.Empty).Split(','); foreach (string s in serverList) { if (s != string.Empty) { ServerAddressComboBox.Items.Add(s); ServerListCount++; } } if (ServerListCount > 0) { ServerAddressComboBox.SelectedIndex = 0; ServerAddressComboBox.Text = (string)ServerAddressComboBox.SelectedItem; } else { ServerAddressComboBox.Text = string.Empty; } ServerAddressComboBox.Items.Add("----------履歴----------"); serverList = MyIniParser.GetSetting(IniConstants.SECTION_SETTINGS, IniConstants.CLIENT_SERVER_HISTORY, string.Empty).Split(','); foreach (string s in serverList) { if (s != string.Empty) { if (ServerHistory.Count >= MaxServerHistory) break; ServerAddressComboBox.Items.Add(s); ServerHistory.Add(s); } } ServerHistory.Reverse(); GoTo(OperationMode.Offline); ArenaSessionClient = new AsyncTcpClient(new SessionHandler(this)); ArenaTunnelClient = new AsyncUdpClient(new TunnelHandler(this)); //UdpPortTextBox_TextChanged(null, null); ResetServerStatusBar(); RefreshLanAdapterList(); AppendToChatTextBoxDelegate = delegate(string message, Color color, CheckBox notDisplay) { if (notDisplay != null && notDisplay.Checked) return; try { ChatLogTextBox.AppendText(message); ChatLogTextBox.AppendText(Environment.NewLine); //ChatLogTextBox.ScrollToCaret(); } catch (Exception ex) { logTextBox.AppendText(message); logTextBox.AppendText(ex.ToString()); } }; string software = String.Format("{0} アリーナクライアント バージョン: {1}", ApplicationConstants.APP_NAME, ApplicationConstants.VERSION); AppendToChatTextBoxDelegate(software, Color.DarkGreen, null); AppendToChatTextBoxDelegate("プロトコル: " + Protocol1Constants.PROTOCOL_NUMBER, Color.DarkGreen, null); ThreadPool.QueueUserWorkItem(new WaitCallback(PendingLogPollingLoop)); }
public void Error <T>(T valueObject, string user, string message, Exception exception, LogAppender logAppender, bool canNotify = false) where T : class { bool canAppendWithSQL = logAppender == LogAppender.all || logAppender == LogAppender.sql; bool canAppendWithFILE = logAppender == LogAppender.all || logAppender == LogAppender.file; Action <ILogBase> log = x => x.Error(valueObject, user, message, exception); try { if (canAppendWithSQL) { log.Invoke(LogDB.GetLog(DbConnection)); } if (canAppendWithFILE) { if (string.IsNullOrEmpty(LoggingPathFile)) { throw new Exception("file path is empty."); } log.Invoke(LogFile.GetLog(LoggingPathFile)); } } catch (Exception) { throw; } }
/// <summary> /// This method is an orchestrator for following activities /// 1. Start the subscription /// 2. List the subscription /// 3. Read content blob urls between start and end date /// 4. Read failed requests from previous batches/executions and insert activities to Lists /// 5. Read data from current batche and insert activities to the same list /// 6. Insert activities to Staging table /// 7. Load activities from Staging table to Main table /// 8. Clean up & update settings for next execution /// </summary> /// <returns></returns> public async Task ExtractOffice365AuditLogsAsync() { _lastAuditLogTimeStampForPowerPlatform = AuditLogTimeStampsForPowerPlatform.Item1; _endTimeStampForPowerPlatform = AuditLogTimeStampsForPowerPlatform.Item2; try { // Start the subscription var startSubscriptionResponse = await _o365ActivityApiWrapper.StartSubscriptionAsync().ConfigureAwait(false); if (startSubscriptionResponse.IsSuccessStatusCode) { //List the subscription var listSubscriptionResponse = await _o365ActivityApiWrapper.ListSubscriptionAsync().ConfigureAwait(false); if (listSubscriptionResponse.IsSuccessStatusCode) { //Manage date and time if (string.IsNullOrWhiteSpace(_lastAuditLogTimeStampForPowerPlatform)) { _lastAuditLogTimeStampForPowerPlatform = DateTime.UtcNow.AddHours(-24).ToString("yyyy-MM-ddTHH:mm"); _endTimeStampForPowerPlatform = DateTime.ParseExact(_lastAuditLogTimeStampForPowerPlatform, "yyyy-MM-ddTHH:mm", null) .AddMinutes(_configuration.AppSettings.IngestionFrequencyInMinutes).ToString("yyyy-MM-ddTHH:mm"); } else { _lastAuditLogTimeStampForPowerPlatform = Convert.ToDateTime(_lastAuditLogTimeStampForPowerPlatform).ToString("yyyy-MM-ddTHH:mm"); _endTimeStampForPowerPlatform = Convert.ToDateTime(_endTimeStampForPowerPlatform).ToString("yyyy-MM-ddTHH:mm"); } ValidateStartEndTime(_endTimeStampForPowerPlatform, _lastAuditLogTimeStampForPowerPlatform); //Retrieve content blobs between start and end time. var contentUris = await _o365ActivityApiWrapper.RetrieveBlobUrisAsync(_lastAuditLogTimeStampForPowerPlatform, _endTimeStampForPowerPlatform).ConfigureAwait(false); _log.Info($"Retrived {contentUris.Count} content blobs between {_lastAuditLogTimeStampForPowerPlatform} and {_endTimeStampForPowerPlatform} time period"); //Read Previous failed blob url request and retry those var failedRequests = await _ado.GetFailedRequestsAsync().ConfigureAwait(false); List <int> completedOldRequests = new List <int>(); List <Activity> oldPowerAppActivities = new List <Activity>(); List <Activity> oldPowerBIActivities = new List <Activity>();; List <Activity> oldPowerAutomateActivities = new List <Activity>(); if (failedRequests.Count > 0) { (completedOldRequests, oldPowerAppActivities, oldPowerBIActivities, oldPowerAutomateActivities) = await RetryOldRequestsAsync(failedRequests).ConfigureAwait(false); } //Read activities from Office 365 and load Power BI, Power App and Power Automate in memory List <string> failedBlobUrls = new List <string>(); List <Activity> powerAppActivities = new List <Activity>(); List <Activity> powerBIActivities = new List <Activity>();; List <Activity> powerAutomateActivities = new List <Activity>(); (failedBlobUrls, powerAppActivities, powerBIActivities, powerAutomateActivities) = await _o365ActivityApiWrapper.RetrieveAuditActivititesFromBlobContentAsync(contentUris).ConfigureAwait(false); powerAutomateActivities.AddRange(oldPowerAutomateActivities); powerAppActivities.AddRange(oldPowerAppActivities); powerBIActivities.AddRange(oldPowerBIActivities); oldPowerBIActivities.Clear(); oldPowerAppActivities.Clear(); oldPowerAutomateActivities.Clear(); LogAppender.FlushApplicationInsightsTelemetry(); //Bulk insert failed records if (failedBlobUrls.Count > 0) { await InsertFailedBlobUrlsToDatabaseAsync(failedBlobUrls).ConfigureAwait(false); } //Truncate Staging tables await _ado.TruncateStagingTablesAsync().ConfigureAwait(false); //Load Audit data to staging table await LoadPowerPlatformLogsToStagingTableAsync(powerAppActivities, "stg.PowerAppsAuditLog").ConfigureAwait(false); await LoadPowerPlatformLogsToStagingTableAsync(powerBIActivities, "stg.PowerAutomateAuditLog").ConfigureAwait(false); await LoadPowerPlatformLogsToStagingTableAsync(powerAutomateActivities, "stg.PowerBIAuditLog").ConfigureAwait(false); _log.Info($"Ingested PowerPlatform logs to staging tables.."); //Unobserved Operations are marked in data ingestion from staging to main tables //Load Audit data from staging to main tables await _ado.LoadStagingDataToMainTablesAsync().ConfigureAwait(false); _log.Info($"Exploded and ingested audit logs to main tables from staging area.."); //Delete completed old requests await _ado.DeleteOldRequestsAsync(completedOldRequests).ConfigureAwait(false); //Update Latesttime stamp bool istimeStampUpdated = await _ado.UpdateLatestTimeStampAsync(_endTimeStampForPowerPlatform + ":00").ConfigureAwait(false); _log.Info("Updated last refresh timestamp for next refresh.."); //Truncate Staging tables await _ado.TruncateStagingTablesAsync().ConfigureAwait(false); _log.Info("Cleaned staging tables.."); LogAppender.FlushApplicationInsightsTelemetry(); //Data Archival } else { var errorMessage = await listSubscriptionResponse.Content.ReadAsStringAsync().ConfigureAwait(false); _log.Error($"Unable to list subscriptions to pull the audit logs. Please find the error {errorMessage}."); } } else { var errorMessage = await startSubscriptionResponse.Content.ReadAsStringAsync().ConfigureAwait(false); _log.Error($"Unable to start the subscription to pull the audit logs. Please find the error {errorMessage}."); } } catch (AggregateException ex) { var aggregateException = ex.Flatten(); for (int i = 0; i < aggregateException.InnerExceptions.Count; ++i) { _log.Error($"{aggregateException.InnerExceptions[i].GetExceptionFootprints()}"); } throw; } catch (Exception ex) { _log.Error($"{ex.GetExceptionFootprints()}"); throw; } finally { LogAppender.FlushApplicationInsightsTelemetry(); } }
/// <summary> /// Remove a LogAppender object from the List of LogAppender objects /// </summary> /// <param name="logAppender">The LogAppender object that should be removed</param> public void RemoveLogAppender(LogAppender logAppender) { LogAppenders.Remove(logAppender); }
protected virtual void LogEntry(LogEntry le) { LogAppender.Log(le); }