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

Commit b066e10

Browse files
author
Sergey Komisarchik
committed
logging improvements
1 parent 769e319 commit b066e10

File tree

2 files changed

+34
-50
lines changed

2 files changed

+34
-50
lines changed

Source/LinqToDB.EntityFrameworkCore/LinqToDBForEFToolsImplDefault.cs

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

1361-
static int _messageCounter;
1362-
13631361
/// <summary>
13641362
/// Logs lin2db trace event to logger.
13651363
/// </summary>
13661364
/// <param name="info">lin2db trace event.</param>
13671365
/// <param name="logger">Logger instance.</param>
13681366
public virtual void LogConnectionTrace(TraceInfo info, ILogger logger)
13691367
{
1370-
Interlocked.Increment(ref _messageCounter);
1368+
var logLevel = info.TraceLevel switch
1369+
{
1370+
TraceLevel.Off => LogLevel.None,
1371+
TraceLevel.Error => LogLevel.Error,
1372+
TraceLevel.Warning => LogLevel.Warning,
1373+
TraceLevel.Info => LogLevel.Information,
1374+
TraceLevel.Verbose => LogLevel.Debug,
1375+
_ => LogLevel.Trace,
1376+
};
1377+
1378+
using var _ = logger.BeginScope("TraceInfoStep: {TraceInfoStep}, IsAsync: {IsAsync}", info.TraceInfoStep, info.IsAsync);
1379+
13711380
switch (info.TraceInfoStep)
13721381
{
13731382
case TraceInfoStep.BeforeExecute:
1374-
logger.LogInformation(_messageCounter, $"{info.TraceInfoStep}{Environment.NewLine}{info.SqlText}");
1383+
logger.Log(logLevel, "{SqlText}", info.SqlText);
13751384
break;
13761385

13771386
case TraceInfoStep.AfterExecute:
1378-
logger.LogInformation(_messageCounter,
1379-
info.RecordsAffected != null
1380-
? $"Query Execution Time ({info.TraceInfoStep}) {(info.IsAsync ? " (async)" : "")}: {info.ExecutionTime}. Records Affected: {info.RecordsAffected}.\r\n"
1381-
: $"Query Execution Time ({info.TraceInfoStep}) {(info.IsAsync ? " (async)" : "")}: {info.ExecutionTime}\r\n");
1387+
if (info.RecordsAffected is null)
1388+
{
1389+
logger.Log(logLevel, "Query Execution Time: {ExecutionTime}.", info.ExecutionTime);
1390+
}
1391+
else
1392+
{
1393+
logger.Log(logLevel, "Query Execution Time: {ExecutionTime}. Records Affected: {RecordsAffected}.", info.ExecutionTime, info.RecordsAffected);
1394+
}
13821395
break;
13831396

13841397
case TraceInfoStep.Error:
13851398
{
1386-
var sb = new StringBuilder();
1387-
1388-
sb.Append(info.TraceInfoStep);
1389-
1390-
for (var ex = info.Exception; ex != null; ex = ex.InnerException)
1391-
{
1392-
try
1393-
{
1394-
sb
1395-
.AppendLine()
1396-
.AppendLine($"Exception: {ex.GetType()}")
1397-
.AppendLine($"Message : {ex.Message}")
1398-
.AppendLine(ex.StackTrace)
1399-
;
1400-
}
1401-
catch
1402-
{
1403-
// Sybase provider could generate exception that will throw another exception when you
1404-
// try to access Message property due to bug in AseErrorCollection.Message property.
1405-
// There it tries to fetch error from first element of list without checking wether
1406-
// list contains any elements or not
1407-
sb
1408-
.AppendLine()
1409-
.AppendFormat("Failed while tried to log failure of type {0}", ex.GetType())
1410-
;
1411-
}
1412-
}
1413-
1414-
logger.LogError(_messageCounter, sb.ToString());
1415-
1399+
logger.Log(logLevel, info.Exception, "Failed executing command.");
14161400
break;
14171401
}
14181402

14191403
case TraceInfoStep.Completed:
14201404
{
1421-
var sb = new StringBuilder();
1422-
1423-
sb.Append($"Total Execution Time ({info.TraceInfoStep}){(info.IsAsync ? " (async)" : "")}: {info.ExecutionTime}.");
1424-
1425-
if (info.RecordsAffected != null)
1426-
sb.Append($" Rows Count: {info.RecordsAffected}.");
1427-
1428-
sb.AppendLine();
1429-
1430-
logger.LogInformation(_messageCounter, sb.ToString());
1431-
1405+
if (info.RecordsAffected is null)
1406+
{
1407+
logger.Log(logLevel, "Total Execution Time: {TotalExecutionTime}.", info.ExecutionTime);
1408+
}
1409+
else
1410+
{
1411+
logger.Log(logLevel, "Total Execution Time: {TotalExecutionTime}. Rows Count: {RecordsAffected}.", info.ExecutionTime, info.RecordsAffected);
1412+
}
14321413
break;
14331414
}
14341415
}

Tests/LinqToDB.EntityFrameworkCore.BaseTests/TestUtils.cs

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

15-
.AddTestLogger();
15+
.AddTestLogger(o =>
16+
{
17+
o.IncludeScopes = true;
18+
});
1619
});
1720

1821
}

0 commit comments

Comments
 (0)