using System; using System.Collections.Generic; using System.Data.Common; using System.Linq; using NLog; using System.Text; namespace DataAccessLayer { public static class SqlLogging { private static readonly ILogger Logger = LogManager.GetCurrentClassLogger(); public static void LogSqlStart(string sql, Dictionary parameters = null) { var sb = new StringBuilder(); sb.AppendLine($"Executing SQL: {sql}"); if (parameters != null && parameters.Any()) { sb.AppendLine("Parameters:"); foreach (var param in parameters) { sb.AppendLine($" @{param.Key} = {param.Value ?? "null"}"); } } Logger.Debug(sb.ToString()); } public static void LogSqlError(string sql, Exception ex, Dictionary parameters = null) { var sb = new StringBuilder(); sb.AppendLine($"SQL Error in query: {sql}"); if (parameters != null && parameters.Any()) { sb.AppendLine("Parameters:"); foreach (var param in parameters) { sb.AppendLine($" @{param.Key} = {param.Value ?? "null"}"); } } Logger.Error(ex, sb.ToString()); } public static void LogStoredProcedureStart(string procedureName, List parameters = null) { Logger.Debug($"Executing stored procedure: {procedureName}"); if (parameters != null) { foreach (var param in parameters) { Logger.Debug($" Parameter: {param.ParameterName} = {param.Value ?? "null"}"); } } } public static void LogStoredProcedureSuccess(string procedureName, int rowCount = 0) { Logger.Debug($"Stored procedure {procedureName} executed successfully. Rows affected/returned: {rowCount}"); } public static void LogStoredProcedureError(string procedureName, Exception ex, List parameters = null) { Logger.Error(ex, $"Error executing stored procedure {procedureName}"); if (parameters != null) { foreach (var param in parameters) { Logger.Error($" Parameter: {param.ParameterName} = {param.Value ?? "null"}"); } } } public static void LogError(Exception ex) { Logger.Error(ex); } public static void LogErrors(Exception ex) { Logger.Error(ex); } } }