Skip to content
This repository was archived by the owner on Feb 1, 2025. It is now read-only.

Commit eca3546

Browse files
committed
Merge branch 'feature/structured-logging' of https://github.com/skomis-mm/linq2db.EntityFrameworkCore into skomis-mm-feature/structured-logging
# Conflicts: # Tests/LinqToDB.EntityFrameworkCore.BaseTests/TestUtils.cs
2 parents 0394c3f + b066e10 commit eca3546

File tree

2 files changed

+35
-50
lines changed

2 files changed

+35
-50
lines changed

Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs

Lines changed: 30 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1081,77 +1081,58 @@ public virtual EFConnectionInfo ExtractConnectionInfo(IDbContextOptions? options
10811081
return coreOptions?.Model;
10821082
}
10831083

1084-
static int _messageCounter;
1085-
10861084
/// <summary>
10871085
/// Logs lin2db trace event to logger.
10881086
/// </summary>
10891087
/// <param name="info">lin2db trace event.</param>
10901088
/// <param name="logger">Logger instance.</param>
10911089
public virtual void LogConnectionTrace(TraceInfo info, ILogger logger)
10921090
{
1093-
Interlocked.Increment(ref _messageCounter);
1091+
var logLevel = info.TraceLevel switch
1092+
{
1093+
TraceLevel.Off => LogLevel.None,
1094+
TraceLevel.Error => LogLevel.Error,
1095+
TraceLevel.Warning => LogLevel.Warning,
1096+
TraceLevel.Info => LogLevel.Information,
1097+
TraceLevel.Verbose => LogLevel.Debug,
1098+
_ => LogLevel.Trace,
1099+
};
1100+
1101+
using var _ = logger.BeginScope("TraceInfoStep: {TraceInfoStep}, IsAsync: {IsAsync}", info.TraceInfoStep, info.IsAsync);
1102+
10941103
switch (info.TraceInfoStep)
10951104
{
10961105
case TraceInfoStep.BeforeExecute:
1097-
logger.LogInformation(_messageCounter, $"{info.TraceInfoStep}{Environment.NewLine}{info.SqlText}");
1106+
logger.Log(logLevel, "{SqlText}", info.SqlText);
10981107
break;
10991108

11001109
case TraceInfoStep.AfterExecute:
1101-
logger.LogInformation(_messageCounter,
1102-
info.RecordsAffected != null
1103-
? $"Query Execution Time ({info.TraceInfoStep}) {(info.IsAsync ? " (async)" : "")}: {info.ExecutionTime}. Records Affected: {info.RecordsAffected}.\r\n"
1104-
: $"Query Execution Time ({info.TraceInfoStep}) {(info.IsAsync ? " (async)" : "")}: {info.ExecutionTime}\r\n");
1110+
if (info.RecordsAffected is null)
1111+
{
1112+
logger.Log(logLevel, "Query Execution Time: {ExecutionTime}.", info.ExecutionTime);
1113+
}
1114+
else
1115+
{
1116+
logger.Log(logLevel, "Query Execution Time: {ExecutionTime}. Records Affected: {RecordsAffected}.", info.ExecutionTime, info.RecordsAffected);
1117+
}
11051118
break;
11061119

11071120
case TraceInfoStep.Error:
11081121
{
1109-
var sb = new StringBuilder();
1110-
1111-
sb.Append(info.TraceInfoStep);
1112-
1113-
for (var ex = info.Exception; ex != null; ex = ex.InnerException)
1114-
{
1115-
try
1116-
{
1117-
sb
1118-
.AppendLine()
1119-
.AppendLine($"Exception: {ex.GetType()}")
1120-
.AppendLine($"Message : {ex.Message}")
1121-
.AppendLine(ex.StackTrace)
1122-
;
1123-
}
1124-
catch
1125-
{
1126-
// Sybase provider could generate exception that will throw another exception when you
1127-
// try to access Message property due to bug in AseErrorCollection.Message property.
1128-
// There it tries to fetch error from first element of list without checking wether
1129-
// list contains any elements or not
1130-
sb
1131-
.AppendLine()
1132-
.AppendFormat("Failed while tried to log failure of type {0}", ex.GetType())
1133-
;
1134-
}
1135-
}
1136-
1137-
logger.LogError(_messageCounter, sb.ToString());
1138-
1122+
logger.Log(logLevel, info.Exception, "Failed executing command.");
11391123
break;
11401124
}
11411125

11421126
case TraceInfoStep.Completed:
11431127
{
1144-
var sb = new StringBuilder();
1145-
1146-
sb.Append($"Total Execution Time ({info.TraceInfoStep}){(info.IsAsync ? " (async)" : "")}: {info.ExecutionTime}.");
1147-
1148-
if (info.RecordsAffected != null)
1149-
sb.Append($" Rows Count: {info.RecordsAffected}.");
1150-
1151-
sb.AppendLine();
1152-
1153-
logger.LogInformation(_messageCounter, sb.ToString());
1154-
1128+
if (info.RecordsAffected is null)
1129+
{
1130+
logger.Log(logLevel, "Total Execution Time: {TotalExecutionTime}.", info.ExecutionTime);
1131+
}
1132+
else
1133+
{
1134+
logger.Log(logLevel, "Total Execution Time: {TotalExecutionTime}. Rows Count: {RecordsAffected}.", info.ExecutionTime, info.RecordsAffected);
1135+
}
11551136
break;
11561137
}
11571138
}

Tests/LinqToDB.EntityFrameworkCore.BaseTests/TestUtils.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,11 @@ public class TestUtils
1313
.AddFilter("System", LogLevel.Warning)
1414
.AddFilter("LinqToDB.EntityFrameworkCore.Test", LogLevel.Information)
1515

16-
.AddTestLogger(o => o.FormatterName = ConsoleFormatterNames.Simple);
16+
.AddTestLogger(o =>
17+
{
18+
o.IncludeScopes = true;
19+
o.FormatterName = ConsoleFormatterNames.Simple;
20+
});
1721
});
1822

1923
}

0 commit comments

Comments
 (0)