Multi-Platform Package Manager for Stable Diffusion
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

75 lines
2.4 KiB

using System.Diagnostics;
using Microsoft.Extensions.Logging;
using NLog;
using NLog.Targets;
using StabilityMatrix.Avalonia.Diagnostics.LogViewer.Core.Logging;
using MsLogLevel = Microsoft.Extensions.Logging.LogLevel;
namespace StabilityMatrix.Avalonia.Diagnostics.LogViewer;
[Target("DataStoreLogger")]
public class DataStoreLoggerTarget : TargetWithLayout
{
#region Fields
private ILogDataStore? _dataStore;
private DataStoreLoggerConfiguration? _config;
#endregion
#region methods
protected override void InitializeTarget()
{
// we need to inject dependencies
// var serviceProvider = ResolveService<IServiceProvider>();
// reference the shared instance
_dataStore = LogDataStore.Instance;
// _dataStore = serviceProvider.GetRequiredService<ILogDataStore>();
// load the config options
/*var options
= serviceProvider.GetService<IOptionsMonitor<DataStoreLoggerConfiguration>>();*/
// _config = options?.CurrentValue ?? new DataStoreLoggerConfiguration();
_config = new DataStoreLoggerConfiguration();
base.InitializeTarget();
}
protected override void Write(LogEventInfo logEvent)
{
// cast NLog Loglevel to Microsoft LogLevel type
var logLevel = (MsLogLevel)Enum.ToObject(typeof(MsLogLevel), logEvent.Level.Ordinal);
// format the message
var message = RenderLogEvent(Layout, logEvent);
// retrieve the EventId
logEvent.Properties.TryGetValue("EventId", out var result);
if (result is not EventId eventId)
{
eventId = _config!.EventId;
}
// add log entry
_dataStore?.AddEntry(new LogModel
{
Timestamp = DateTime.UtcNow,
LogLevel = logLevel,
// do we override the default EventId if it exists?
EventId = eventId.Id == 0 && (_config?.EventId.Id ?? 0) != 0 ? _config!.EventId : eventId,
State = message,
LoggerName = logEvent.LoggerName,
CallerClassName = logEvent.CallerClassName,
CallerMemberName = logEvent.CallerMemberName,
Exception = logEvent.Exception?.Message ?? (logLevel == MsLogLevel.Error ? message : ""),
Color = _config!.Colors[logLevel],
});
Debug.WriteLine($"--- [{logLevel.ToString()[..3]}] {message} - {logEvent.Exception?.Message ?? "no error"}");
}
#endregion
}