Files
RobustToolbox/Robust.Server/Log/LokiLogHandler.cs
T
AcruidandGitHub 2183cd7ca1 Massive Namespace Cleanup (#1544)
* Removed the Interfaces folder.
* All objects inside the GameObjects subfolders are now in the GameObjects namespace.
* Added a Resharper DotSettings file to mark the GameObjects subfolders as not providing namespaces.
* Simplified Robust.client.Graphics namespace.
* Automated remove redundant using statements.
2021-02-10 23:27:19 -08:00

61 lines
1.6 KiB
C#

using System;
using System.Collections.Generic;
using Robust.Shared.Log;
using Serilog;
using Serilog.Events;
using Serilog.Sinks.Loki;
using Serilog.Sinks.Loki.Labels;
using SLogger = Serilog.Core.Logger;
namespace Robust.Server.Log
{
public class LokiLogHandler : ILogHandler, IDisposable
{
private readonly SLogger _sLogger;
public LokiLogHandler(string serverName, LokiCredentials credentials)
{
_sLogger = new LoggerConfiguration()
.WriteTo.LokiHttp(credentials, new LogLabelProvider(serverName))
.MinimumLevel.Debug()
.CreateLogger();
}
public void Log(string sawmillName, LogEvent message)
{
var valid = _sLogger.BindProperty(LogManager.SawmillProperty, sawmillName, false, out var sawmillProperty);
if (valid)
{
message.AddOrUpdateProperty(sawmillProperty);
}
_sLogger.Write(message);
}
public void Dispose()
{
_sLogger.Dispose();
}
private sealed class LogLabelProvider : ILogLabelProvider
{
private readonly string _serverName;
public LogLabelProvider(string serverName)
{
_serverName = serverName;
}
public IList<LokiLabel> GetLabels()
{
return new[]
{
new LokiLabel("App", "Robust.Server"),
new LokiLabel("Server", _serverName),
};
}
}
}
}