Skip to main content
Glama
NLogAdapter.cs2.34 kB
#if NLOG using System.Collections.Generic; using NLog; using NLog.Targets; namespace AI.Logging.Adapters { /// <summary> /// NLog target that forwards logs to AI Logger /// </summary> [Target("AILogger")] public class AILoggerTarget : TargetWithLayout { private readonly AILogger logger; /// <summary> /// Create a new AI Logger target /// </summary> public AILoggerTarget() { this.logger = new AILogger("NLog"); } /// <summary> /// Create a new AI Logger target with the specified logger /// </summary> /// <param name="logger">AI Logger to forward logs to</param> public AILoggerTarget(AILogger logger) { this.logger = logger; } /// <summary> /// Write a log event /// </summary> /// <param name="logEvent">Log event to write</param> protected override void Write(LogEventInfo logEvent) { var level = ConvertLogLevel(logEvent.Level); var message = Layout.Render(logEvent); var properties = new Dictionary<string, object>(); // Extract properties foreach (var key in logEvent.Properties.Keys) { properties[key.ToString()] = logEvent.Properties[key]; } logger.Log(level, message, new { loggerName = logEvent.LoggerName, properties = properties, exception = logEvent.Exception != null ? new { message = logEvent.Exception.Message, stackTrace = logEvent.Exception.StackTrace, type = logEvent.Exception.GetType().FullName } : null }); } private LogLevel ConvertLogLevel(NLog.LogLevel level) { if (level == NLog.LogLevel.Debug) return LogLevel.Debug; if (level == NLog.LogLevel.Info) return LogLevel.Info; if (level == NLog.LogLevel.Warn) return LogLevel.Warning; if (level == NLog.LogLevel.Error) return LogLevel.Error; if (level == NLog.LogLevel.Fatal) return LogLevel.Critical; return LogLevel.Info; } } } #endif

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TSavo/Unity-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server