... mas também qualquer outro registrador.
Tradicionalmente, o Photon Server SDK vem com log4net. Mas isso não significa que todos devam usá-lo. Quase qualquer logger pode ser usado. Tudo o que você precisa fazer é criar seu próprio conjunto de adaptador, que conterá a classe proxy e a fábrica para ela.
Vejamos o Serilog, que está na moda hoje. Não o conheço, por isso é possível que algo não seja feito da melhor maneira ou errado.
E então vamos começar.
A primeira coisa que precisamos fazer é criar uma montagem para o seu adaptador.
No SDK 4.0, as interfaces ExitGames.Logging.ILogger e ExitGames.Logging.ILoggerFactory estão em ExitGamesLibs.dll. No SDK 5.0, eles foram movidos para ExitGames.Logging.dll. ExitGames.Logging está no pacote nuget de mesmo nome. Essas bibliotecas precisam ser adicionadas como dependências.
A seguir, criamos uma classe de proxy para o logger. Não vou dar todo o seu código, para não inflar o exemplo.
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);
}
......................................................
A próxima coisa de que precisamos é uma classe de fábrica.
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);
}
}
O toque final é a instalação da nossa fábrica
ExitGames.Logging.LogManager.SetLoggerFactory(SerilogLoggerFactory.Instance);
Isso deve ser feito antes que os registradores em Photon.SocketServer.dll sejam inicializados. O construtor estático de seu aplicativo de fóton é o melhor para isso.
O que mais você precisa saber sobre o registro
Use if (log.IsDebugEnabled)
, , , . , if-, . Info . Warning .
, - . . LogCountGuard. , . , . . . , ,
Para tornar esta ferramenta conveniente de usar, métodos de extensão foram adicionados. Agora tudo se parece com isso. Digamos que precisamos que uma mensagem não apareça com mais frequência do que 10 vezes por minuto. Você precisa fazer o seguinte,
//
private static readonly LogCountGuard msgLogGuard = new LogCountGuard(new TimeSpan(0, 0, 6), 1);
//
log.Warn(msgLogGuard, "message");
Conclusão
Concluindo, gostaria de desejar a todos muito sucesso no uso do SDK do Photon Server e não permitir que a ausência do seu logger favorito os assuste.