ALog is a powerful and extensible logging framework built for .NET 8+.
It is designed to be simple to use, highly configurable, and ready for modern development across platforms including Windows, Linux, and iOS.
- ✅ Intuitive API:
Log.Write(...),Log.WriteAsync(...) - ✅ Fully async- and sync-capable
- ✅ Structured logging with scoped contextual data (
BeginScope(...)) - ✅ Exception logging included
- ✅ Formatter support (PlainText, JSON, or custom)
- ✅ Console and file writers (with optional color + rolling)
- ✅ Log level filtering
- ✅ Cross-platform compatible
- ✅ Fluent, builder-style configuration
- ✅ Minimal setup:
using ALog;gives access to everything
ALog is currently under development. You can use it via project reference:
git clone https://github.com/yourusername/ALog.gitReference ALog.csproj in your .NET 8+ project.
using ALog;
var config = new LoggerConfig()
.AddWriter(new ConsoleLogWriter(useColors: true, formatter: new PlainTextFormatter("HH:mm:ss")))
.AddWriter(new FileLogWriter("logs/app.log", new JsonFormatter(pretty: true), maxFileSizeInBytes: 1_048_576)) // 1 MB
.SetMinimumLevel(LogLevel.Debug);
Log.Init(config);Log.Write("Application started");
using (Log.BeginScope("userId", 42))
{
using (Log.BeginScope("feature", "Login"))
{
Log.Write("User successfully authenticated");
Log.Write(new Exception("Test failure"), "Something went wrong", LogLevel.Error);
}
}
await Log.WriteAsync("Async log message");For high-performance scenarios, enable the background queue:
var config = new LoggerConfig()
.AddWriter(new ConsoleLogWriter())
.AddWriter(new FileLogWriter("logs/app.log"))
.UseBackgroundQueue(enabled: true, capacity: 1000, batchSize: 10, flushInterval: TimeSpan.FromMilliseconds(100))
.SetMinimumLevel(LogLevel.Debug);
Log.Init(config);
// Logs are queued and processed in background
Log.Write("This will be processed asynchronously");
// Flush remaining logs before shutdown
await Log.FlushAsync();// HTTP Writer
var httpWriter = new HttpLogWriter(
endpoint: "https://api.example.com/logs",
method: HttpMethod.Post,
headers: new Dictionary<string, string> { ["Authorization"] = "Bearer token" }
);
// SQL Writer
var sqlWriter = new SqlLogWriter(
connectionString: "Server=localhost;Database=Logs;Integrated Security=true;",
tableName: "ApplicationLogs"
);
// Azure Application Insights
var azureWriter = new AzureLogWriter(
instrumentationKey: "your-instrumentation-key"
);
// AWS CloudWatch
var awsWriter = new AwsCloudWatchWriter(
logGroupName: "/aws/application/myapp",
logStreamName: "main-stream"
);
var config = new LoggerConfig()
.AddWriter(httpWriter)
.AddWriter(sqlWriter)
.AddWriter(azureWriter)
.AddWriter(awsWriter);You can use built-in IPlatformHelper implementations to resolve safe, writeable log paths:
using ALog.Platform.Windows;
var logPath = new WindowsPlatformHelper().ResolveLogFilePath("logs/app.log");using ALog.Platform.Linux;
var logPath = new LinuxPlatformHelper().ResolveLogFilePath("logs/app.log");using ALog.Platform.iOS;
var logPath = new IOSPlatformHelper().ResolveLogFilePath("logs/app.log");You control the log location – ALog does not enforce platform helpers. They are optional and recommended for mobile or portable environments.
| Writer | Description |
|---|---|
ConsoleLogWriter |
Outputs to console with optional color and formatting |
FileLogWriter |
Outputs to file with optional rolling and formatter support |
HttpLogWriter |
Sends logs to HTTP endpoints (REST APIs, webhooks) |
SqlLogWriter |
Stores logs in SQL Server database |
AzureLogWriter |
Sends logs to Azure Application Insights |
AwsCloudWatchWriter |
Sends logs to AWS CloudWatch |
| Formatter | Description |
|---|---|
PlainTextFormatter |
Developer-friendly, single-line format (customizable time) |
JsonFormatter |
Structured JSON output, ideal for logs ingestion tools |
Scoped logging adds temporary key-value pairs that are automatically removed when their scope ends:
using (Log.BeginScope("sessionId", "abc123"))
{
Log.Write("User clicked 'Buy'");
}
// sessionId is no longer attached hereWorks automatically with supported formatters like JSON or plain text.
- Scope-based logging (
using Log.BeginScope(...)) - Channel-based async background log queue
- Additional writers (HTTP, SQL, Azure Application Insights, AWS CloudWatch)
- External config via JSON or environment
- NuGet package & logo
- Full unit test coverage
Contributions welcome! Fork the repository and submit a PR.
For ideas like new formatters or writers, feel free to open a discussion first.
MIT © Artur Bobb / Chookees
Built and maintained by Artur Bobb / Chookees