Code
·
58 lines
·
1710 bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58# VanDerHeijden.Logging.Redis
Redis log writer for [VanDerHeijden.Logging](https://www.nuget.org/packages/VanDerHeijden.Logging).
Writes batched log entries to a **Redis list** using `RPUSH`. Each entry is serialized as JSON. The list can be consumed by any Redis-compatible consumer such as Logstash, a worker service, or a custom processor via `BLPOP`.
## Installation
```bash
dotnet add package VanDerHeijden.Logging.Redis
```
## Usage
```csharp
var redis = await ConnectionMultiplexer.ConnectAsync("localhost:6379");
var db = redis.GetDatabase();
builder.Logging.AddRedisLogger(
database: db,
listKey: "logs",
ttl: TimeSpan.FromDays(7)); // optional: auto-expire the key
```
## Log entry format (JSON)
```json
{
"timestamp": "2026-02-22T14:03:12.456Z",
"level": "Information",
"category": "MyApp.Service",
"message": "MyApp.Service: User logged in",
"exception": null,
"path": "/api/users/login",
"method": "POST",
"clientIp": "203.0.113.42",
"referer": "https://example.com/login",
"userAgent": "Mozilla/5.0 ..."
}
```
The HTTP fields are populated automatically when `IHttpContextAccessor` is registered:
```csharp
builder.Services.AddHttpContextAccessor();
```
Outside an HTTP context they are `null` and omitted from the JSON output.
## Notes
- The Redis list grows until consumed. Make sure a consumer drains it via `BLPOP`/`LPOP`.
- Use `ttl` to automatically expire the key if no consumer is configured.
- `fullMode: DropOldest` is the default — under extreme load, oldest log entries are dropped to protect application throughput.
## Repository
[https://github.com/alphons/VanDerHeijden.Logging](https://github.com/alphons/VanDerHeijden.Logging)