https://github.com/jchristn/openauditlog
Simple C# event library providing event persistence and allowing you to write your own emitters
https://github.com/jchristn/openauditlog
audit auditlog auditlogging event events syslog
Last synced: over 1 year ago
JSON representation
Simple C# event library providing event persistence and allowing you to write your own emitters
- Host: GitHub
- URL: https://github.com/jchristn/openauditlog
- Owner: jchristn
- License: mit
- Created: 2021-01-28T22:10:09.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2024-12-24T23:00:20.000Z (over 1 year ago)
- Last Synced: 2025-04-24T00:07:31.053Z (over 1 year ago)
- Topics: audit, auditlog, auditlogging, event, events, syslog
- Language: C#
- Homepage:
- Size: 18.3 MB
- Stars: 4
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- Contributing: CONTRIBUTING.md
- License: LICENSE.md
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README

# OpenAuditLog
[](https://www.nuget.org/packages/OpenAuditLog/) [](https://www.nuget.org/packages/OpenAuditLog)
Simple C# event and audit log library with persistence allowing you to write your own emitters.
## How it Works
### Instantiate
Instantiate the ```AuditLog``` object, specifying the name of the Sqlite database file to use.
```csharp
using OpenAuditLog;
AuditLog log = new AuditLog("auditlog.db");
```
### Define Event Targets
Define and add your targets using ```AddTarget``` and the ```AuditLogTarget``` class. Your target function should return a boolean with ```true``` indicating success, or, ```false``` indicating failure and that OpenAuditLog should try again.
```csharp
Func func1 = delegate (AuditLogEntry a)
{
Console.WriteLine("Action 1: " + a.ToJson(false));
return true; // report success
};
log.AddTarget("MyTarget", func1);
```
### Logger of Last Resort
Set ```Logger``` if you wish to output messages to the console or elsewhere. This also serves as a "logger of last resort" in case an event can't be sent to a target. Additionally, you can create handlers for the ```EntrySendFailure``` and ```EntryEvicted``` events.
```csharp
log.Logger = Console.WriteLine;
log.EntrySendFailure += MyEntrySendFailure;
log.EntryEvicted += MyEntryEvicted;
static void MyEntrySendFailure(object sender, EntryEventArgs args)
{
Console.WriteLine("Entry " + args.Entry.GUID + " couldn't be sent to target " + args.Target.GUID);
}
static void MyEntryEvicted(object sender, EntryEventArgs args)
{
Console.WriteLine("Entry " + args.Entry.GUID + " was evicted, failed too hard!");
}
```
### Let 'Er Rip
Add events using ```AddEvent``` and watch them fly.
Events added through ```AddEvent``` are persisted in Sqlite until emitted successfully. If multiple targets are configured, one record per target will be created for each event. You can control the number of attempts to send an event by modifying ```AuditLog.MaxAttempts``` or specify the optional parameter ```maxAttempts``` in ```AuditLog.AddEvent```.
Events sent successfully are removed from Sqlite, and those that have failed the specified number of times will also be removed. Refer to "Logger of Last Resort" above to determine how to intercept such situations.
```csharp
// build it yourself
AuditLogEntry myEntry = new AuditLogEntry();
myEntry.Metadata = myClassInstance;
// also set Identity, Source, Target, Resource, Type, etc, if you like
```
```csharp
// or use the giga-constructor
AuditLogEntry myEntry = new AuditLogEntry(metadata, identity, source, ...);
```
Fire away!
```csharp
log.AddEvent(myEntry);
```
## Simple Example
Refer to the ```Test``` project for a full example.
```csharp
AuditLog auditLog = new AuditLog("auditlog.db");
auditLog.Logger = Console.WriteLine;
auditLog.MaxAttempts = 3;
Func myTarget = delegate (AuditLogEntry a)
{
Console.WriteLine("My target: " + a.ToJson(false));
return true;
};
// add the target
auditLog.AddTarget(new AuditLogTarget("target1", myTarget));
// create the event
AuditLogEntry entry = new AuditLogEntry();
entry.Metadata = myClassInstance;
// also set Identity, Source, Target, Resource, Type, etc
// fire away!
auditLog.AddEvent(entry);
```
## Version History
Refer to ```CHANGELOG.md``` for version history.