Skip to content
George Michaelides edited this page Jul 3, 2020 · 6 revisions

Log Gem's events

Gem uses a logging facade to log various events. You can implement your own appender to intercept and format Gem's messages.

IAppender

The base interface is IAppender which has the following members

    void Info(string message);
    void Info(string message, params object[] args);

    void Debug(string message);
    void Debug(string message, params object[] args);

    void Warn(string message);
    void Warn(string message, params object[] args);

    void Error(string message);
    void Error(string message, params object[] args);

    void Fatal(string message);
    void Fatal(string message, params object[] args); 

Implement your own logging logic and add your IAppender instance to Gem.Auditor.RegisterAppender(IAppender appender) to intercept the logging events.

ActionAppender

The ActionAppender implements IAppender and takes an Action and a format template as constructor arguments

    new ActionAppender(echo: Console.WriteLine,
                       formatTemplate: "[%Date{0:G}] %Verbosity - %Message");

Format Template options:

   %Verbosity - The event's verbosity
   %Date{pattern} - The DateTime.Now %Date{0} for default
   %Message - The event's message
   %NewLine - Environment.NewLine

You can add your own formatting rules by adding a new FormattingRule(Regex pattern, Func<string, string> replacementRule) to appender.AddFormatingRules(ActionAppender.FormattingRule[] rules)

  new FormattingRule(pattern: new Regex("%Date{.*}",RegexOptions.Compiled),
                     replacementRule: 
                     msg => String.Format(msg.Replace("%Date", ""),
                                          DateTime.Now)   

ConfigurableAppender

Additionally you can use the ConfigurableAppender to invoke an action prior an event. The configurableAppender has the following options

  Action<TAppender> Info 
  Action<TAppender> Debug 
  Action<TAppender> Warn 
  Action<TAppender> Error 
  Action<TAppender> Fatal 

  ConfigurableAppender
  .Create(new ActionAppender(echo: Console.WriteLine),
          options =>
          {
              options.Info = 
              appender => Console.BackgroundColor = ConsoleColor.Yellow
              options.Error = 
              appender => Console.BackgroundColor = ConsoleColor.Red
          });

Third Party Logging Frameworks

Log4Net

You can log using your log4net configuration by registering the Log4NetWrapper class

    new Log4NetWrapper(string appenderRef)
    new Log4NetWrapper(log4net.ILog logger)

NLog

You can log using your NLog configuration by registering the NLogWrapper class

    new NLogWrapper(string appenderRef)
    new NLogWrapper(NLog.Logger logger)

Clone this wiki locally