Code/Logger.cs
using System.Collections.Generic;
using Sandbox;
public class LogLevel
{
public const string Info = "info";
public const string Warn = "warn";
public const string Error = "error";
}
/// <summary>
/// This is a component - in your library!
/// </summary>
[Title( "Fivemanage Logging" )]
public class Logger : Component
{
private string apiKey;
private bool debugMode;
public Logger( string apiKey, bool debugMode = false )
{
this.apiKey = apiKey;
this.debugMode = debugMode;
Log.Info( "Fivemanage Logging component initialized." );
}
public void Message(string datasetId, string level, string message, object metadata = null,
[System.Runtime.CompilerServices.CallerMemberName] string resource = null)
{
SendLog(datasetId, level, message, metadata, resource);
}
public void Debug(string datasetId, string message, object metadata = null,
[System.Runtime.CompilerServices.CallerMemberName] string resource = null)
{
if ( !debugMode ) return;
SendLog(datasetId, "debug", message, metadata, resource);
}
public void Info(string datasetId, string message, object metadata = null,
[System.Runtime.CompilerServices.CallerMemberName] string resource = null)
{
SendLog(datasetId, LogLevel.Info, message, metadata, resource);
}
public void Warn(string datasetId, string message, object metadata = null,
[System.Runtime.CompilerServices.CallerMemberName] string resource = null)
{
SendLog(datasetId, LogLevel.Warn, message, metadata, resource);
}
public void Error(string datasetId, string message, object metadata = null,
[System.Runtime.CompilerServices.CallerMemberName] string resource = null)
{
SendLog(datasetId, LogLevel.Error, message, metadata, resource);
}
private async void SendLog(string datasetId, string level, string message, object metadata = null, string resource = null)
{
if (this.debugMode) {
Log.Info( $"Level={level}, Message={message}, Resource={resource}, Metadata={metadata}");
}
var trace = Http.CreateJsonContent(new[]
{
new {
level = level,
message = message,
metadata = metadata,
resource = resource
}
});
var headers = new Dictionary<string, string>
{
{ "Authorization", $"{apiKey}" },
{ "X-Fivemanage-Dataset", datasetId }
};
var response = await Http.RequestAsync( "https://api.fivemanage.com/api/logs/batch", "POST", trace, headers );
if ( debugMode )
{
Log.Info( $"Fivemanage Logging Response: {response.StatusCode}" );
}
}
}