Serilog.Sinks.RabbitMQ
9.0.0
dotnet add package Serilog.Sinks.RabbitMQ --version 9.0.0
NuGet\Install-Package Serilog.Sinks.RabbitMQ -Version 9.0.0
<PackageReference Include="Serilog.Sinks.RabbitMQ" Version="9.0.0" />
<PackageVersion Include="Serilog.Sinks.RabbitMQ" Version="9.0.0" />
<PackageReference Include="Serilog.Sinks.RabbitMQ" />
paket add Serilog.Sinks.RabbitMQ --version 9.0.0
#r "nuget: Serilog.Sinks.RabbitMQ, 9.0.0"
#:package Serilog.Sinks.RabbitMQ@9.0.0
#addin nuget:?package=Serilog.Sinks.RabbitMQ&version=9.0.0
#tool nuget:?package=Serilog.Sinks.RabbitMQ&version=9.0.0
Serilog.Sinks.RabbitMQ
A Serilog sink that publishes log events to RabbitMQ via the official RabbitMQ.Client library.
The aim of this sink is to expose RabbitMQ.Client functionality in an idiomatic Serilog
way without burying it behind extra abstractions. Expect plain RabbitMQ behaviour with a
slightly simpler surface.
Table of contents
- Features
- Installation
- Quick start
- Configuration
- Configuration reference
- Audit sink
- Customising message properties and routing keys
- Multi-host configuration
- Samples
- Compatibility matrix
- Migrating to 9.0.0
- References
- License
Features
- Publishes log events through
RabbitMQ.Clientv7. - Supports both
WriteTo(batched) andAuditTo(synchronous, throws on failure) sinks. - Eagerly opens a fixed pool of channels at startup; broken channels are replaced in the background.
- Optional automatic exchange declaration.
- TLS / SSL support, multi-host clusters, dynamic routing keys, custom message properties.
- Pluggable failure sinks for fan-out on emit errors.
- Targets
netstandard2.0,net8.0, andnet10.0.
Installation
dotnet add package Serilog.Sinks.RabbitMQ
Or via the Package Manager Console:
Install-Package Serilog.Sinks.RabbitMQ
Quick start
using Serilog;
using Serilog.Sinks.RabbitMQ;
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.RabbitMQ(
hostnames: ["localhost"],
username: "guest",
password: "guest",
exchange: "logs",
exchangeType: "topic",
autoCreateExchange: true)
.CreateLogger();
Log.Information("Hello RabbitMQ");
Log.CloseAndFlush();
The sink eagerly opens 64 channels in the background at startup. See Channel pool to tune.
Configuration
The sink can be configured from code, from appsettings.json (via
Serilog.Settings.Configuration),
or from App.config (via
Serilog.Settings.AppSettings).
All approaches accept the same set of options — see Configuration reference.
Programmatic
The recommended way is the action-based overload, which gives strongly typed access to both the client and the sink configuration:
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.RabbitMQ((client, sink) =>
{
client.Hostnames = ["localhost"];
client.Username = "guest";
client.Password = "guest";
client.Exchange = "logs";
client.ExchangeType = "topic";
client.DeliveryMode = RabbitMQDeliveryMode.Durable;
client.RoutingKey = "log";
client.ChannelCount = 32;
sink.TextFormatter = new Serilog.Formatting.Json.JsonFormatter();
sink.BatchPostingLimit = 100;
sink.BufferingTimeLimit = TimeSpan.FromSeconds(2);
})
.CreateLogger();
A flat-parameter overload is also available for simple setups (see Quick start).
appsettings.json
{
"Serilog": {
"Using": [ "Serilog.Sinks.RabbitMQ" ],
"MinimumLevel": "Information",
"WriteTo": [
{
"Name": "RabbitMQ",
"Args": {
"clientConfiguration": {
"hostnames": [ "localhost" ],
"username": "guest",
"password": "guest",
"exchange": "logs",
"exchangeType": "topic",
"deliveryMode": "Durable",
"routingKey": "log",
"autoCreateExchange": true,
"channelCount": 32
},
"sinkConfiguration": {
"batchPostingLimit": 100,
"bufferingTimeLimit": "00:00:02",
"textFormatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
}
}
}
]
}
}
Keys are case-insensitive.
App.config
<add key="serilog:using:RabbitMQ" value="Serilog.Sinks.RabbitMQ" />
<add key="serilog:write-to:RabbitMQ.hostnames" value="server1,server2" />
<add key="serilog:write-to:RabbitMQ.username" value="guest" />
<add key="serilog:write-to:RabbitMQ.password" value="guest" />
<add key="serilog:write-to:RabbitMQ.exchange" value="logs" />
<add key="serilog:write-to:RabbitMQ.batchPostingLimit" value="100" />
<add key="serilog:write-to:RabbitMQ.bufferingTimeLimit" value="00:00:02" />
Configuration reference
Connection
| Option | Type | Default | Description |
|---|---|---|---|
hostnames |
string[] |
required | One or more broker hostnames. See Multi-host configuration. |
username |
string |
required | Authentication user. |
password |
string |
required | Authentication password. |
port |
int |
0 |
Broker port. 0 defaults to the RabbitMQ.Client default (5672 / 5671). |
vHost |
string |
"" |
Virtual host. |
heartbeat |
ushort |
0 (broker default) |
Heartbeat interval in milliseconds. |
clientProvidedName |
string? |
null |
Connection name shown in the RabbitMQ Management UI. |
Exchange and routing
| Option | Type | Default | Description |
|---|---|---|---|
exchange |
string |
"" |
Target exchange name. |
exchangeType |
string |
"fanout" |
Exchange type (direct, fanout, topic, headers). |
deliveryMode |
RabbitMQDeliveryMode |
NonDurable |
Persistence of published messages. |
routingKey |
string |
"" |
Default routing key. Can be overridden per event via ISendMessageEvents. |
autoCreateExchange |
bool |
false |
Declare the exchange on startup if it does not exist. |
TLS / SSL
| Option | Type | Default | Description |
|---|---|---|---|
sslEnabled |
bool |
false |
Enable TLS for broker connections. |
sslServerName |
string? |
first hostname | Server name used for certificate validation. |
sslVersion |
SslProtocols |
None |
TLS protocol version. |
sslAcceptablePolicyErrors |
SslPolicyErrors |
None |
Tolerated certificate validation errors. |
sslCheckCertificateRevocation |
bool |
false |
Check certificate revocation status. |
Channel pool
| Option | Type | Default | Description |
|---|---|---|---|
channelCount |
int |
64 |
Number of channels held in the pool. Channels are opened eagerly in the background at startup; broken channels are replaced automatically. When all channels are in use, additional publish calls await until one is returned. |
warmUpMaxRetries |
int? |
10 |
Maximum consecutive warm-up failures before the pool enters a broken state. While broken, GetAsync throws InvalidOperationException immediately so publish failures surface to the BatchingSink failure listener (or WriteTo.FallbackChain(...) wrapper) instead of blocking waiters. A 60 s cooldown elapses between exhaustion and the next probe attempt; probe success transitions the pool back to warming. Set to null for unlimited retries (pre-9.0 behaviour). The exponential backoff schedule between attempts (500 ms → 30 s cap) is not configurable. |
Deprecated:
maxChannels(parameter) andMaxChannels(property) are kept as[Obsolete]shims that forward tochannelCount/ChannelCount. They will be removed in a future major version. See Migrating to 9.0.0.
Batching
These options apply to WriteTo.RabbitMQ only. Audit sinks write each event synchronously
and ignore them.
| Option | Type | Default | Description |
|---|---|---|---|
batchPostingLimit |
int |
50 |
Maximum events written per batch. |
bufferingTimeLimit |
TimeSpan |
2s |
Flush interval for partial batches. |
queueLimit |
int? |
null |
Maximum buffered events. null = unbounded. |
retryTimeLimit |
TimeSpan? |
null → 10m |
How long a failed batch is retried (with exponential back-off) before it is handed to the registered ILoggingFailureListener — i.e. the next link in WriteTo.FallbackChain(...). Leave null for the 10 minute default. TimeSpan.Zero disables retries; failed batches go to the fallback immediately. Lower the value for high-throughput pipelines that should engage the fallback faster than the 10 minute default; raise it for noisy networks where short blips should not produce fallback writes. |
Other options
| Option | Type | Default | Description |
|---|---|---|---|
formatter |
ITextFormatter? |
CompactJsonFormatter |
Formatter used to render the event into the message body. |
levelSwitch |
LogEventLevel |
Verbose |
Minimum level for events emitted by the sink. |
sendMessageEvents |
ISendMessageEvents? |
null |
Hooks for customising message properties and routing keys (see below). |
Failure handling
WriteTo.RabbitMQ runs inside Serilog's BatchingSink. Publish failures always
propagate so BatchingSink's ILoggingFailureListener can observe them; the
exception is also written to Serilog.Debugging.SelfLog. Compose with Serilog
core's WriteTo.FallbackChain(...) to route failed batches to one or more
fallback sinks:
Log.Logger = new LoggerConfiguration()
.WriteTo.FallbackChain(
primary => primary.RabbitMQ((client, sink) =>
{
client.Hostnames = ["localhost"];
client.Username = "guest";
client.Password = "guest";
client.Exchange = "logs";
}),
fallback => fallback.Console())
.CreateLogger();
FallbackChain accepts two or more configure callbacks: the first is the
primary, every subsequent callback receives the original batch when the
preceding sink in the chain throws. For listener-based reporting (no
fallback sink, just notify a custom ILoggingFailureListener), use
WriteTo.Fallible(configureSink, listener) instead.
The same composition works in appsettings.json by wrapping the RabbitMQ
block in a FallbackChain entry — the JSON binding ships in
Serilog.Settings.Configuration 10.0.1+
(serilog/serilog-settings-configuration#474).
Requires Serilog ≥ 4.4.0. Setting
RestrictedToMinimumLevelon the wrapped RabbitMQ sink config composes correctly withFallbackChain. Serilog wraps the sink in an internalRestrictedSink, which since 4.4.0 forwards optional interfaces — includingISetLoggingFailureListener— through anOptionalInterfaceForwardingSink(serilog/serilog#2234), so the listener-propagation chain stays intact and failed batches still reach the fallback. Earlier Serilog versions dropped them silently; 9.0.0 depends on 4.4.0, so this works out of the box.
Audit sink
A Serilog audit sink writes events that must succeed and surfaces exceptions to the caller.
Use AuditTo.RabbitMQ instead of WriteTo.RabbitMQ. Wrap audit logging calls in
try/catch to handle failures.
Log.Logger = new LoggerConfiguration()
.AuditTo.RabbitMQ((client, sink) =>
{
client.Hostnames = ["localhost"];
client.Username = "guest";
client.Password = "guest";
client.Exchange = "audit";
client.DeliveryMode = RabbitMQDeliveryMode.Durable;
})
.CreateLogger();
The audit sink supports the same options as the regular sink except the batching options
(batchPostingLimit, bufferingTimeLimit, queueLimit).
Customising message properties and routing keys
Implement ISendMessageEvents to set per-event message properties or compute a routing key
from the log event.
public class CustomMessageEvents : ISendMessageEvents
{
public void OnSetMessageProperties(LogEvent logEvent, IBasicProperties properties)
{
properties.Headers = new Dictionary<string, object?>
{
["log-level"] = logEvent.Level.ToString(),
};
if (logEvent.Properties.TryGetValue("CorrelationId", out var correlationId))
{
properties.CorrelationId = correlationId.ToString();
}
}
public string OnGetRoutingKey(LogEvent logEvent, string defaultRoutingKey) =>
logEvent.Level switch
{
LogEventLevel.Error => "error",
_ => defaultRoutingKey,
};
}
Wire it up via RabbitMQClientConfiguration.SendMessageEvents:
client.SendMessageEvents = new CustomMessageEvents();
Multi-host configuration
Pass multiple hostnames to connect to a RabbitMQ cluster. The client will attempt each in turn until one succeeds.
<add key="serilog:using:RabbitMQ" value="Serilog.Sinks.RabbitMQ" />
<add key="serilog:write-to:RabbitMQ.hostnames" value="host1,host2,host3" />
<add key="serilog:write-to:RabbitMQ.username" value="guest" />
<add key="serilog:write-to:RabbitMQ.password" value="guest" />
Samples
Three runnable sample projects live under samples/:
| Sample | Configuration style | Target |
|---|---|---|
NetFromCodeSample |
Pure code, includes audit sink | net10.0 |
NetAppsettingsJsonSample |
appsettings.json via Serilog.Settings.Configuration, includes a custom ISendMessageEvents |
net10.0 |
NetFrameworkAppSettingsConfigSample |
App.config via Serilog.Settings.AppSettings |
net48 |
A docker-compose.yml at the repo root brings up a RabbitMQ broker for running the samples
and integration tests.
Compatibility matrix
| Serilog.Sinks.RabbitMQ | .NETStandard | .NETFramework | Serilog | RabbitMQ.Client |
|---|---|---|---|---|
| 2.0.0 | 1.6.0 | 4.5.1 | 2.3.0 | 4.* |
| 3.0.0 | 1.6.1 | 4.5.1 | 2.8.0 | 5.* |
| 6.0.0 | 2.0.0 | 4.7.2 | 2.8.0 | 6.* |
| 7.0.0 | 2.0.0 | — | 3.1.1 | 6.8.* |
| 8.0.0 | 2.0.0 | — | 4.2.0 | 7.0 |
| 9.0.0 | 2.0.0 | — | 4.4.x | 7.2.x |
Migrating to 9.0.0
MaxChannelsis nowChannelCount. The property and themaxChannelsparameter onWriteTo.RabbitMQ/AuditTo.RabbitMQhave been renamed toChannelCountandchannelCount. The property keeps an[Obsolete]shim so existing code compiles with a warning; the parameter is a hard rename — updateappsettings.json/App.configkeys frommaxChannelstochannelCount.- Channel pool semantics changed. The pool is now fixed-size and pre-opens all channels in the background at startup. When all channels are in use, additional publish calls await until one is returned (previous behaviour grew the pool on demand). Broken channels are replaced automatically in the background.
- In-sink failure sink and
EmitEventFailureHandlingremoved. Publish failures now always propagate so Serilog'sBatchingSinklistener can route the original batch through Serilog core'sWriteTo.FallbackChain(...)(orWriteTo.Fallible(...)for listener-based reporting). Diagnostics are written toSelfLogon every failure (no opt-in flag required). TheEmitEventFailureHandlingenum, theRabbitMQSinkConfiguration.EmitEventFailureproperty, thefailureSinkConfigurationextension parameter, and the flat-overloademitEventFailureparameter are gone.AuditTo.RabbitMQnotifies any configuredILoggingFailureListenerbefore rethrowing. RabbitMQSinkimplementsISetLoggingFailureListener. Direct-construct users and the audit path (AuditTo.RabbitMQ) can now hook aSerilog.Core.ILoggingFailureListeneron the sink itself viaSetFailureListener(...). The batched pipeline (WriteTo.RabbitMQ) still routes failures viaBatchingSink's listener — Serilog does not forwardSetFailureListenerto inner sinks by design.Validate()on configuration objects.RabbitMQClientConfigurationandRabbitMQSinkConfigurationnow expose publicValidate()methods and are invoked during sink construction. Misconfiguration (missing hostnames, invalid port, zero batch limit, etc.) throws at startup instead of failing at first publish.QueueLimitvalidation.QueueLimit, when set, must be greater than zero —QueueLimit = 0now throwsArgumentOutOfRangeExceptionrather than silently creating a zero-capacity queue. Leave the property unset (null) for an unbounded queue.ChannelCountvalidation.ChannelCountmust be greater than zero.ChannelCount = 0or a negative value now throwsArgumentOutOfRangeExceptionat configuration time; previously the channel pool silently substituted the default of 64. Omit the property (or leave the parameter at its default) to keep the default pool size.- Bounded warm-up retry with circuit-breaker recovery.
RabbitMQChannelPoolnow backs off exponentially (500 ms → 30 s cap) and gives up afterWarmUpMaxRetriesconsecutive failures (default10). A broken pool failsGetAsyncfast so events surface to Serilog'sBatchingSinkfailure listener (orWriteTo.FallbackChain(...)) instead of blocking waiters. Self-heals via a half-open probe after a 60 s cooldown. SetRabbitMQClientConfiguration.WarmUpMaxRetries = nullfor unlimited retries — matches pre-9.0 behaviour, but preferWriteTo.FallbackChain(...)for resilience instead. Microsoft.Extensions.ObjectPooldependency removed. No action needed unless your application referenced it transitively through this package.- Serilog 4.4.0 required. The minimum Serilog version is now
4.4.0(up from4.3.x). 4.4.0 forwards optional sink interfaces — includingISetLoggingFailureListener— through restricted sinks (serilog/serilog#2234), soRestrictedToMinimumLevelcomposes correctly withWriteTo.FallbackChain(...). - Target frameworks:
net6.0andnet9.0were removed. Supported targets arenetstandard2.0,net8.0, andnet10.0.
Migrating from failureSinkConfiguration to WriteTo.FallbackChain(...)
WriteTo.FallbackChain(...) ships in Serilog core itself (no extra package);
the JSON binding ships in Serilog.Settings.Configuration 10.0.1+. The wrapper
observes the publish exception that the RabbitMQ sink now propagates and re-emits the
entire failed batch to the next sink in the chain (the legacy
failureSinkConfiguration only ever saw one event at a time).
A companion method, WriteTo.Fallible(configureSink, listener), wraps a single sink
with a custom ILoggingFailureListener instead of routing to another sink — useful
when you want to count, alert on, or instrument failures rather than buffer them.
Code: delegate-style configuration
Before (8.x):
Log.Logger = new LoggerConfiguration()
.WriteTo.RabbitMQ(
configure: (client, sink) =>
{
client.Hostnames = ["broker"];
client.Username = "guest";
client.Password = "guest";
client.Exchange = "logs";
sink.EmitEventFailure = EmitEventFailureHandling.WriteToFailureSink
| EmitEventFailureHandling.WriteToSelfLog;
},
failureSinkConfiguration: failure => failure.File("./log/failure.txt"))
.CreateLogger();
After (9.0.0+):
Log.Logger = new LoggerConfiguration()
.WriteTo.FallbackChain(
primary => primary.RabbitMQ((client, sink) =>
{
client.Hostnames = ["broker"];
client.Username = "guest";
client.Password = "guest";
client.Exchange = "logs";
}),
fallback => fallback.File("./log/failure.txt"))
.CreateLogger();
Drop EmitEventFailure entirely — the sink always rethrows now, which is what triggers
the fallback. The exception is also written to Serilog.Debugging.SelfLog, so an
explicit WriteToSelfLog flag is no longer needed.
Code: multiple fallbacks
FallbackChain accepts two or more configure callbacks. Each subsequent sink only
receives the batch when the preceding sink in the chain throws:
Log.Logger = new LoggerConfiguration()
.WriteTo.FallbackChain(
primary => primary.RabbitMQ((client, sink) => { /* ... */ }),
fallback => fallback.Http("https://log-relay.internal/ingest"),
fallback => fallback.File("./log/failure.txt"))
.CreateLogger();
Code: Fallible for listener-based reporting
Use Fallible when you do not want a fallback sink but do want to be notified of
failures (metrics, alerting, custom logic):
Log.Logger = new LoggerConfiguration()
.WriteTo.Fallible(
configureSink: s => s.RabbitMQ((client, sink) => { /* ... */ }),
failureListener: new MyMetricsListener())
.CreateLogger();
appsettings.json
Before:
"WriteTo": [
{
"Name": "RabbitMQ",
"Args": {
"clientConfiguration": { "hostnames": ["broker"], "username": "guest", "password": "guest", "exchange": "logs" },
"sinkConfiguration": { "emitEventFailure": "WriteToFailureSink,WriteToSelfLog" },
"failureSinkConfiguration": [
{ "Name": "File", "Args": { "path": "./log/failure.txt" } }
]
}
}
]
After (requires Serilog.Settings.Configuration 10.0.1+ for FallbackChain binding):
"WriteTo": [
{
"Name": "FallbackChain",
"Args": {
"configureSink": { "Name": "RabbitMQ", "Args": { "clientConfiguration": { "hostnames": ["broker"], "username": "guest", "password": "guest", "exchange": "logs" } } },
"configureFallback": { "Name": "File", "Args": { "path": "./log/failure.txt" } }
}
}
]
Remove emitEventFailure and failureSinkConfiguration keys from the RabbitMQ
block. The Using array does not need a Serilog.Sinks.Fallback entry —
FallbackChain is in Serilog itself.
Audit sink (AuditTo.RabbitMQ)
There is no AuditTo.FallbackChain / AuditTo.Fallible overload — these wrappers
live on LoggerSinkConfiguration only, not on LoggerAuditSinkConfiguration. The
audit path keeps its existing throw-on-failure semantics; handle failures one of two
ways:
try/catcharound the call site:try { Log.Information("audit event {@Event}", payload); } catch (Exception ex) { fallbackLogger.Error(ex, "audit publish failed"); }ILoggingFailureListeneron a directly-constructedRabbitMQSink:var sink = new RabbitMQSink(clientConfig, sinkConfig); sink.SetFailureListener(new MyMetricsListener()); Log.Logger = new LoggerConfiguration() .AuditTo.Sink(sink) .CreateLogger();The listener is notified before the rethrow propagates to the caller.
See CHANGELOG.md for the full release notes.
References
- Serilog
- RabbitMQ .NET client
- Serilog.Settings.Configuration
- Serilog.Settings.AppSettings
- Logging in ASP.NET Core
License
Apache-2.0 — see LICENSE.
| 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 was computed. 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 is compatible. 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.IO.RecyclableMemoryStream (>= 3.0.1)
- RabbitMQ.Client (>= 7.2.1)
- Serilog (>= 4.4.0)
- Serilog.Formatting.Compact (>= 3.0.0)
- System.Threading.Channels (>= 10.0.9)
-
net10.0
- Microsoft.IO.RecyclableMemoryStream (>= 3.0.1)
- RabbitMQ.Client (>= 7.2.1)
- Serilog (>= 4.4.0)
- Serilog.Formatting.Compact (>= 3.0.0)
-
net8.0
- Microsoft.IO.RecyclableMemoryStream (>= 3.0.1)
- RabbitMQ.Client (>= 7.2.1)
- Serilog (>= 4.4.0)
- Serilog.Formatting.Compact (>= 3.0.0)
NuGet packages (32)
Showing the top 5 NuGet packages that depend on Serilog.Sinks.RabbitMQ:
| Package | Downloads |
|---|---|
|
Informatique.Base.Core
Base classed used in Project in Core |
|
|
FFCEI.Microservices
A free library for ASP.NET Core 6+ Microservices development, with Model, Model Repository, Entity Framework Core and common Web Api features like CORS, Json serialization fixes, Swagger generation, JWT Authentication for simple and objective microservices development |
|
|
SyncSoft.ECOM.Shared
ECommerce Project |
|
|
Kalbe.Library.Common
Package Description |
|
|
Informatique.UOB.Base.Core
Base classed used in UOB Project in Core |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 9.0.0 | 1,228 | 7/10/2026 |
| 8.0.0 | 296,090 | 12/23/2024 |
| 7.0.3 | 57,184 | 11/24/2024 |
| 7.0.2 | 351,591 | 5/13/2024 |
| 7.0.1 | 165,752 | 3/19/2024 |
| 7.0.0 | 13,075 | 3/18/2024 |
| 7.0.0-pre.44 | 19,551 | 2/9/2024 |
| 6.0.0 | 2,224,483 | 1/23/2021 |
| 6.0.0-pre | 50,581 | 10/4/2020 |
| 3.0.6 | 815,974 | 9/12/2019 |
| 3.0.3 | 18,604 | 7/5/2019 |
| 3.0.0 | 23,230 | 4/12/2019 |
| 2.0.2 | 263,943 | 4/25/2018 |
| 2.0.1 | 136,387 | 4/18/2017 |
| 2.0.0 | 6,652 | 10/18/2016 |
| 1.0.0.10 | 8,395 | 4/19/2016 |