Dameng.Logging.TUnit
0.1.4
dotnet add package Dameng.Logging.TUnit --version 0.1.4
NuGet\Install-Package Dameng.Logging.TUnit -Version 0.1.4
<PackageReference Include="Dameng.Logging.TUnit" Version="0.1.4" />
<PackageVersion Include="Dameng.Logging.TUnit" Version="0.1.4" />
<PackageReference Include="Dameng.Logging.TUnit" />
paket add Dameng.Logging.TUnit --version 0.1.4
#r "nuget: Dameng.Logging.TUnit, 0.1.4"
#:package Dameng.Logging.TUnit@0.1.4
#addin nuget:?package=Dameng.Logging.TUnit&version=0.1.4
#tool nuget:?package=Dameng.Logging.TUnit&version=0.1.4
Dameng.Logging.TUnit
๐งช Microsoft.Extensions.Logging integration for TUnit testing framework
A modern NuGet package that provides an ILogger
implementation seamlessly integrated with TUnit's TestContext.Current.OutputWriter
. Perfect for capturing structured logging output directly in your test results.
โจ Features
- ๐ฏ Native TUnit Integration - Works seamlessly with TUnit's test context
- ๐ Structured Logging - Full support for Microsoft.Extensions.Logging features
- ๐ Scope Support - Hierarchical logging scopes for better test organization
- โก Multiple Target Frameworks - Supports .NET 8.0, .NET 9.0, and .NET Standard 2.0
- ๐๏ธ Configurable - Flexible configuration options for different testing scenarios
- ๐ Zero Dependencies - Minimal footprint with only essential dependencies
๐ฆ Installation
Package Manager Console
Install-Package Dameng.Logging.TUnit
.NET CLI
dotnet add package Dameng.Logging.TUnit
Or visit the NuGet package page for more installation options.
๐ Quick Start
Get started with Dameng.Logging.TUnit
in seconds! Use TestContext.Current.GetLogger()
to get an ILogger
instance that writes directly to your TUnit test output.
Basic Usage
using Dameng.Logging.TUnit;
using Microsoft.Extensions.Logging;
public class Tests
{
[Test]
public void Basic()
{
var logger = TestContext.Current!.GetLogger("Basic");
logger.LogCritical("This is a critical log message.");
}
}
Output:
this will output:
```text
2025-06-29 15:20:13.198 crit: Basic [0]: This is a critical log message.
Logging with Scopes
var logger = TestContext.Current!.GetLogger(
"Scope",
includeScope: true
);
using (logger.BeginScope("Scope 1"))
{
logger.LogInformation("This is scope 1 message.");
using (logger.BeginScope("Scope 2"))
{
logger.LogInformation("This is scope 2 message");
}
logger.LogInformation("This is scope 1 message after scope 2.");
}
Output:
2025-06-29 15:26:54.394 info Scope: This is scope 1 message.
=> Scope 1
2025-06-29 15:26:54.398 info Scope: This is scope 2 message
=> Scope 1 => Scope 2
2025-06-29 15:26:54.399 info Scope: This is scope 1 message after scope 2.
=> Scope 1
Exception Logging
var logger = TestContext.Current!.GetLogger(
"Exception",
includeScope: true
);
using (logger.BeginScope("Scope for exception"))
{
try
{
throw new InvalidOperationException("This is a test exception with scope.");
}
catch (Exception ex)
{
logger.LogError(ex, "An error occurred while processing the request with scope.");
}
}
Output:
2025-06-29 15:26:54.394 fail Exception: An error occurred while processing the request with scope.
=> Scope for exception
System.InvalidOperationException: This is a test exception with scope.
at Dameng.Logging.TUnit.Tests.Tests.ExceptionAndScope() in C:\...\Tests.cs:line 68
๐ง Advanced Usage
Using LoggerFactory
For more complex scenarios, use the GetLoggerFactory()
extension method to get a pre-configured ILoggerFactory
with TUnit logging:
using Dameng.Logging.TUnit;
using Microsoft.Extensions.Logging;
public class Tests
{
[Test]
public void LoggerFactoryBasic()
{
var loggerFactory = TestContext.Current!.GetLoggerFactory();
var logger = loggerFactory.CreateLogger("MyCategory");
logger.LogInformation("This is logged via LoggerFactory.");
}
}
Custom Configuration
Configure additional logging providers and filters alongside TUnit:
[Test]
public void LoggerFactoryWithCustomConfiguration()
{
var loggerFactory = TestContext.Current!.GetLoggerFactory(
includeScope: true,
dateTimeFormat: "HH:mm:ss",
builderAction: builder =>
{
// Add additional logging providers or configuration
builder.SetMinimumLevel(LogLevel.Debug);
builder.AddFilter("MyCategory", LogLevel.Warning);
}
);
var logger = loggerFactory.CreateLogger("MyCategory");
logger.LogInformation("This message will be filtered out due to the filter above.");
logger.LogWarning("This warning will be displayed.");
}
Using ILoggerBuilder
Alternative approach using ILoggerBuilder
for additional configuration options:
var logger = LoggerFactory.Create(logging =>
logging.AddTUnit(TestContext.Current!)
).CreateLogger("Basic");
โ๏ธ Configuration
Minimum Log Level
Control the minimum log level when creating loggers:
Using GetLogger
var logger = TestContext.Current!.GetLogger("Basic", minLevel: LogLevel.Trace);
DateTime Format and Display
You can control the datetime format and whether to include datetime in the log output:
// Custom datetime format
var logger = TestContext.Current!.GetLogger(
"CustomDateTime",
dateTimeFormat: "HH:mm:ss"
);
logger.LogInformation("This message uses custom datetime format.");
Output:
15:30:45 info: CustomDateTime [0]: This message uses custom datetime format.
// Disable datetime display
var logger = TestContext.Current!.GetLogger(
"NoDateTime",
includeDateTime: false
);
logger.LogInformation("This message has no datetime.");
Output:
info: NoDateTime [0]: This message has no datetime.
You can also configure datetime settings when using GetLoggerFactory()
:
var loggerFactory = TestContext.Current!.GetLoggerFactory(
dateTimeFormat: "yyyy-MM-dd HH:mm:ss",
includeDateTime: true
);
var logger = loggerFactory.CreateLogger("MyCategory");
logger.LogInformation("Custom datetime format via factory.");
Or when using AddTUnit
with ILoggingBuilder
:
var logger = LoggerFactory.Create(logging =>
logging.AddTUnit(
TestContext.Current!,
dateTimeFormat: "HH:mm:ss.fff",
includeDateTime: false
)
).CreateLogger("NoDateTimeLogger");
License
Available Configuration Options
Parameter | Type | Default | Description |
---|---|---|---|
categoryName |
string |
Required | The category name for the logger |
includeScope |
bool |
false |
Whether to include scope information in log output |
dateTimeFormat |
string |
"yyyy-MM-dd HH:mm:ss.fff" |
Custom date/time format |
minLevel |
LogLevel |
LogLevel.Information |
Minimum log level to output |
builderAction |
Action<ILoggingBuilder> |
null |
Additional configuration for the logging builder |
๐ค Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
๐ Requirements
- .NET 8.0, .NET 9.0, or .NET Standard 2.0
- TUnit testing framework
- Microsoft.Extensions.Logging
๐ License
This project is licensed under the MIT License. See the LICENSE file for details.
๐ Related Projects
- TUnit - The modern testing framework this package integrates with
- Microsoft.Extensions.Logging - The logging abstraction this package implements
Made with โค๏ธ by dameng324
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Logging (>= 9.0.6)
- TUnit.Core (>= 0.25.21)
-
net8.0
- Microsoft.Extensions.Logging (>= 9.0.6)
- TUnit.Core (>= 0.25.21)
-
net9.0
- Microsoft.Extensions.Logging (>= 9.0.6)
- TUnit.Core (>= 0.25.21)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Initial release of Dameng.Logging.TUnit - provides ILogger integration for TUnit test framework with support for scopes, different log levels, and exception logging.