Photonはlog4netだけではありません

...だけでなく、他のロガー。





従来、Photon ServerSDKにはlog4netが付属しています。しかし、これは誰もがそれを使用する必要があるという意味ではありません。ほとんどすべてのロガーを使用できます。必要なのは、プロキシクラスとそのファクトリを含む独自のアダプタアセンブリを作成することだけです。





今日流行のセリログを見てみましょう。私は彼に精通していないので、何かが最善の方法で行われないか、間違っている可能性があります。





それでは始めましょう。





最初に行う必要があるのは、アダプタのアセンブリを作成することです。





SDK 4.0では、インターフェイスExitGames.Logging.ILoggerおよびExitGames.Logging.ILoggerFactoryはExitGamesLibs.dllにあります。SDK 5.0では、ExitGames.Logging.dllに移動されました。ExitGames.Loggingは、同じ名前のnugetパッケージに含まれています。これらのライブラリは、依存関係として追加する必要があります。





次に、ロガーのプロキシクラスを作成します。例を膨らませないように、すべてのコードを提供するわけではありません。





    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);
        }
......................................................        

      
      



次に必要なのはファクトリクラスです。





    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);
        }
    }

      
      



最後の仕上げは、私たちの工場の設置です





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

      
      



これは、Photon.SocketServer.dllのロガーを初期化する前に実行する必要があります。これには、photonアプリケーションの静的コンストラクターが最適です。





ロギングについて他に知っておくべきこと

if(log.IsDebugEnabled)を使用します

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





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





このツールを使いやすくするために、拡張メソッドが追加されました。今ではすべてこのように見えます。1分間に10回を超えて表示されないようにするメッセージが必要だとします。次のことを行う必要があります、





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

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

      
      



結論

結論として、Photon Server SDKの使用に成功し、お気に入りのロガーがいないことを恐れないようにしたいと思います。








All Articles