protected virtual void WriteError(Exception exception, ErrorIds errorIds, ErrorCategory errorCategory, object targetObject, bool throwTerminatingError = false) { var record = new ErrorRecord(exception, errorIds.ToString(), errorCategory, targetObject); PowerShellLog.Error($"'{errorIds}' (Category: {errorCategory}) error encountered on object. ", exception); if (throwTerminatingError) { ThrowTerminatingError(record); } WriteError(record); }
public virtual void WriteError(Type exceptionType, string error, ErrorIds errorIds, ErrorCategory errorCategory, object targetObject, bool throwTerminatingError = false) { var exceptionInstance = (Exception)Activator.CreateInstance(exceptionType, error); var record = new ErrorRecord(exceptionInstance, errorIds.ToString(), errorCategory, targetObject); if (throwTerminatingError) { ThrowTerminatingError(record); } WriteError(record); }
public async Task <bool> InsertOrUpdateAsync(Error error) { if (ErrorIds.ContainsKey(error.Id)) { await UpdateAsync(error); return(false); // In update state not necessary to check cache size } await InsertAsync(error); return(true); // New error added to database, so need to check cache size }
public async Task UpdateAsync(Error error) { // If error is not exist in list or error state is now at unhandled exception state then exit if (!ErrorIds.ContainsKey(error.Id) || !ErrorIds[error.Id]) { return; } using (var sqlConn = new SqlCeConnection(ConnectionString)) using (var cmd = sqlConn.CreateCommand()) { cmd.CommandText = string.Format("UPDATE [ErrorLog] SET [DuplicateNo] = [DuplicateNo] + 1 {0} WHERE ErrorId = @id", error.IsHandled ? "" : ", [IsHandled] = @isHandled, [StackTrace] = @stackTrace"); // // Add parameters to command, which will be passed to the stored procedure cmd.Parameters.AddWithValue("@id", error.Id); if (!error.IsHandled) // Just in Unhandled Exceptions { cmd.Parameters.AddWithValue("@isHandled", error.IsHandled); cmd.Parameters.AddWithValue("@stackTrace", SubLimitString(error.StackTrace)); } try { await sqlConn.OpenAsync(); await cmd.ExecuteNonQueryAsync(); ErrorIds[error.Id] = error.IsHandled; } finally { sqlConn.Close(); } } }
protected virtual void WriteError(Type exceptionType, string error, ErrorIds errorIds, ErrorCategory errorCategory, object targetObject, bool throwTerminatingError = false) { var exceptionInstance = (Exception)Activator.CreateInstance(exceptionType, error); WriteError(exceptionInstance, errorIds, errorCategory, targetObject, throwTerminatingError); }
public async Task InsertAsync(Error error) { using (var sqlConn = new SqlCeConnection(ConnectionString)) using (var cmd = sqlConn.CreateCommand()) { cmd.CommandText = @"INSERT INTO [ErrorLog] ([ErrorId] ,[ServerDateTime] ,[Host] ,[User] ,[IsHandled] ,[Type] ,[AppName] ,[CurrentCulture] ,[CLRVersion] ,[Message] ,[Source] ,[StackTrace] ,[ModuleName] ,[MemberType] ,[Method] ,[Processes] ,[ErrorDateTime] ,[OS] ,[IPv4Address] ,[MACAddress] ,[HResult] ,[Line] ,[Column] ,[ScreenCapture] ,[DuplicateNo] ,[Data]) VALUES ( @Id ,@ServerDateTime ,@Host ,@User ,@IsHandled ,@Type ,@AppName ,@CurrentCulture ,@CLRVersion ,@Message ,@Source ,@StackTrace ,@ModuleName ,@MemberType ,@Method ,@Processes ,@ErrorDateTime ,@OS ,@IPv4Address ,@MACAddress ,@HResult ,@Line ,@Column ,@Snapshot ,@Duplicate ,@Data )"; // // Add parameters to command, which will be passed to the stored procedure cmd.Parameters.AddWithValue("@Id", error.Id); cmd.Parameters.AddWithValue("@ServerDateTime", error.ServerDateTime); cmd.Parameters.AddWithValue("@Host", error.Host); cmd.Parameters.AddWithValue("@User", error.User); cmd.Parameters.AddWithValue("@IsHandled", error.IsHandled); cmd.Parameters.AddWithValue("@Type", error.ErrorType); cmd.Parameters.AddWithValue("@AppName", error.AppName); cmd.Parameters.AddWithValue("@CurrentCulture", error.CurrentCulture); cmd.Parameters.AddWithValue("@CLRVersion", error.ClrVersion); cmd.Parameters.AddWithValue("@Message", error.Message); cmd.Parameters.AddWithValue("@Source", error.Source ?? "Source Not Found"); cmd.Parameters.AddWithValue("@StackTrace", SubLimitString(error.StackTrace)); cmd.Parameters.AddWithValue("@ModuleName", error.ModuleName); cmd.Parameters.AddWithValue("@MemberType", error.MemberType); cmd.Parameters.AddWithValue("@Method", error.Method); cmd.Parameters.AddWithValue("@Processes", SubLimitString(error.Processes)); cmd.Parameters.AddWithValue("@ErrorDateTime", error.ErrorDateTime); cmd.Parameters.AddWithValue("@OS", error.OS); cmd.Parameters.AddWithValue("@IPv4Address", error.IPv4Address); cmd.Parameters.AddWithValue("@MACAddress", error.MacAddress); cmd.Parameters.AddWithValue("@HResult", error.HResult); cmd.Parameters.AddWithValue("@Line", error.LineColumn.Line); cmd.Parameters.AddWithValue("@Column", error.LineColumn.Column); cmd.Parameters.AddWithValue("@Duplicate", error.Duplicate); cmd.Parameters.AddWithValue("@Data", SubLimitString(error.Data)); if (error.Snapshot == null) { cmd.Parameters.AddWithValue("@Snapshot", DBNull.Value); } else { cmd.Parameters.AddWithValue("@Snapshot", error.Snapshot.ToBytes()); } try { await sqlConn.OpenAsync(); await cmd.ExecuteNonQueryAsync(); ErrorIds.Add(error.Id, error.IsHandled); } finally { sqlConn.Close(); } } }