-
Notifications
You must be signed in to change notification settings - Fork 1
Logging
Neon is using custom logging system, easy to override for your needs.
It's a parent of loggers, it can have his own logging severity and meta information.
LogManager logManager = new LogManager(LogSeverity.DEBUG);
logManager.Handlers.Add(new LoggingHandlerConsole(new LoggingFormatterDefault()));
ILogger logger = logManager.GetLogger("TestLogger");
logger.Debug("test"); //[2022-08-25 15:56:23.348] [TestLogger] [DEBUG] testYou can set a logging severity for LogManager and Logger, but the message passes the filter only if the message severity equals or more than logger or log manager severity
Getting/setting a default (static) log manager:
LogManager.SetDefault(myLogManager);
ILogger logger = LogManager.Default.GetLogger(nameof(MyClass));Formatters help you format your logging message in any form you want. Neon.Logging has two built-in formatters: LoggingFormatterDefault and LoggingFormatterJson with few options:
- IncludeTimestampInMessage - adds a datetime (default: true)
- DateTimeFormat - datetime format (default: yyyy-MM-dd HH:mm:ss.fff)
- IncludeLoggerNameInMessage - adds a logger name after datetime (default: true)
- IncludeSeverityInMessage - adds a message severity
example of LoggingFormatterDefault output:
[2022-08-25 15:56:23.348] [TestLogger] [DEBUG] test
example of LoggingFormatterJson output:
{"severity": "INFO", "message": "[TestLogger] test", "timestamp": "2022-08-23T14:50:12.237255Z", "labels": {}, "loggerName": "TestLogger"}
Handler provides an output destination for your messages. Neon.Logging has one built-in handler LoggingHandlerConsole it just redirects any output to the console
Unity
For Unity you may want to create custom handler like this:
public class UnityLoggingHandler : ILoggingHandler
{
ILoggingFormatter formatter;
public UnityLoggingHandler(ILoggingFormatter formatter)
{
this.formatter = formatter;
}
public void Write(LogSeverity severity, object message, LoggingMeta meta, ILogger logger)
{
string formatted = formatter.Format(severity, message, meta, logger);
switch (severity)
{
case LogSeverity.TRACE:
case LogSeverity.DEBUG:
case LogSeverity.INFO:
UnityEngine.Debug.Log(formatted);
break;
case LogSeverity.WARNING:
UnityEngine.Debug.LogWarning(formatted);
break;
case LogSeverity.ERROR:
case LogSeverity.CRITICAL:
UnityEngine.Debug.LogError(formatted);
break;
default:
break;
}
}
}LogManager, Logger and a message may have a meta information, merged just before going to handler.
In case there's two same keys the last one will be taken in order: LogManager, Logger, message
Processing meta depends on the formatter and handler, for example LoggingFormatterJson append any meta information in the label field, but LoggingHandlerConsole drops meta