Photon ne concerne pas seulement log4net

... mais aussi tout autre enregistreur.





Traditionnellement, le SDK Photon Server est livré avec log4net. Mais cela ne signifie pas que tout le monde devrait l'utiliser. Presque tous les enregistreurs peuvent être utilisés. Tout ce que vous avez à faire est de créer votre propre assemblage d'adaptateur, qui contiendra la classe proxy et la fabrique correspondante.





Prenons Serilog, qui est à la mode aujourd'hui. Je ne le connais pas, il est donc possible que quelque chose ne se fasse pas de la meilleure façon ou de la mauvaise manière.





Et alors commençons.





La première chose à faire est de créer un assemblage pour votre adaptateur.





Dans SDK 4.0, les interfaces ExitGames.Logging.ILogger et ExitGames.Logging.ILoggerFactory se trouvent dans ExitGamesLibs.dll. Dans SDK 5.0, ils ont été déplacés vers ExitGames.Logging.dll. ExitGames.Logging est dans le package nuget du même nom. Ces bibliothèques doivent être ajoutées en tant que dépendances.





Ensuite, nous créons une classe proxy pour l'enregistreur. Je ne donnerai pas tout son code, pour ne pas gonfler l'exemple.





    class SerilogLogger : ILogger
    {
        private readonly global::Serilog.ILogger logger;

        public bool IsDebugEnabled => this.logger.IsEnabled(LogEventLevel.Debug);

        // not sure whether this is right implementation
        public string Name => this.logger.ToString();

............................................................

        public SerilogLogger(global::Serilog.ILogger logger)
        {
            this.logger = logger;
        }

        public void Debug(object message)
        {
            if (message is string str)
            {
                this.logger.Debug(str);
                return;
            }

            throw new NotSupportedException("only strings are allowed");
        }

        public void Debug(object message, Exception exception)
        {
            if (message is string str)
            {
                this.logger.Debug(exception, str);
                return;
            }
            throw new NotSupportedException("only strings are allowed");
        }

        public void DebugFormat(string format, params object[] args)
        {
            this.logger.Debug(format, args);
        }

        public void DebugFormat(IFormatProvider formatProvider, string format, params object[] args)
        {
            this.logger.Debug(format, args);
        }
......................................................        

      
      



La prochaine chose dont nous avons besoin est une classe d'usine.





    public class SerilogLoggerFactory : ILoggerFactory
    {
        /// <summary>
        /// Provides a static singleton instance for the <see cref="SerilogLoggerFactory"/> class.
        /// </summary>
        public static readonly SerilogLoggerFactory Instance = new SerilogLoggerFactory();

        public ILogger CreateLogger(string name)
        {
            var serilogLogger = Log.ForContext(Constants.SourceContextPropertyName, name);
            return new SerilogLogger(serilogLogger);
        }
    }

      
      



La touche finale est l'installation de notre usine





ExitGames.Logging.LogManager.SetLoggerFactory(SerilogLoggerFactory.Instance);

      
      



Cette opération doit être effectuée avant l'initialisation des enregistreurs de Photon.SocketServer.dll. Le constructeur statique de votre application photon est le meilleur pour cela.





Que devez-vous savoir d'autre sur la journalisation

Utiliser if (log.IsDebugEnabled)

, , , . , if-, . Info . Warning .





, - . . LogCountGuard. , . , . . . , ,





Pour rendre cet outil pratique à utiliser, des méthodes d'extension ont été ajoutées. Maintenant, tout ressemble à ça. Disons que nous avons besoin d'un message pour ne pas apparaître plus de 10 fois par minute. Vous devez faire ce qui suit,





  // 
  private static readonly LogCountGuard msgLogGuard = new LogCountGuard(new TimeSpan(0, 0, 6), 1);
  

  // 
  log.Warn(msgLogGuard, "message");

      
      



Conclusion

En conclusion, je souhaite à tous de réussir à utiliser le SDK Photon Server et ne laissez pas l'absence de votre enregistreur préféré vous effrayer.








All Articles