Logging Quick Start
Maturity: Stable
This module is stable and recommended for production use.
Get structured logging with automatic PII masking running in under 5 minutes.
Complete Data Isolation
Primus Logging runs entirely within your application. All logs are written to targets you configure (Console, File, Application Insights). Primus never receives, stores, or processes your log data.
Install
dotnet add package PrimusSaaS.Logging --version 1.2.6
Setup (3 lines)
using PrimusSaaS.Logging.Extensions;
var builder = WebApplication.CreateBuilder(args);
// Replace default providers and bind Primus config
builder.Logging.ClearProviders();
builder.Logging.AddPrimus(builder.Configuration.GetSection("PrimusLogging"));
var app = builder.Build();
// Optional middleware for request logging + correlation IDs
// app.UsePrimusLogging();
app.Run();
Tip: use
ClearProviders()if you want to disable the default console/debug loggers and emit only what Primus is configured to write.
Configure
appsettings.json (Console Output)
{
"PrimusLogging": {
"ApplicationId": "MyService",
"Environment": "Development",
"MinLevel": 1,
"Targets": [
{
"Type": "console",
"Pretty": true
}
],
"Pii": {
"MaskEmails": true,
"MaskCreditCards": true,
"MaskSSN": true,
"MaskPasswords": true,
"MaskTokens": true,
"MaskSecrets": true
}
}
}
appsettings.json (Application Insights)
{
"PrimusLogging": {
"ApplicationId": "MyService",
"Environment": "Production",
"MinLevel": 1,
"Targets": [
{ "Type": "console", "Pretty": true },
{ "Type": "applicationInsights", "ConnectionString": "InstrumentationKey=xxx" }
],
"Pii": { "MaskEmails": true, "MaskCreditCards": true, "MaskSSN": true }
}
}
appsettings.json (File Output)
{
"PrimusLogging": {
"ApplicationId": "MyService",
"Environment": "Production",
"MinLevel": 1,
"Targets": [
{ "Type": "console", "Pretty": true },
{
"Type": "file",
"Path": "logs/app-.log",
"Async": true,
"MaxFileSize": 10485760,
"MaxRetainedFiles": 5,
"CompressRotatedFiles": true
}
],
"Pii": { "MaskEmails": true, "MaskCreditCards": true, "MaskSSN": true }
}
}
Use
public class OrderService
{
private readonly ILogger<OrderService> _logger;
public OrderService(ILogger<OrderService> logger)
{
_logger = logger;
}
public void ProcessOrder(string orderId, string customerEmail)
{
// Structured logging with automatic PII masking
_logger.LogInformation(
"Processing order {OrderId} for {CustomerEmail}",
orderId,
customerEmail // Auto-masked if contains @
);
}
}
Output Example
[2024-01-15 10:30:45 INF] Processing order ORD-12345 for ***REDACTED***
PII like email addresses and credit card numbers are automatically masked!
Next Steps
| Want to... | See Guide |
|---|---|
| Custom PII patterns | Advanced Features -> |
| Correlation IDs | Advanced Features -> |
| Custom enrichers | Advanced Features -> |
| Full reference | Logging Module Reference -> |