es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo anular el uso de Serilog de ToString en Guid (o en otros tipos primitivos integrados)?

Estoy usando Serilog para hacer registro de un juego multijugador con Guid como identificador de los jugadores.

El registro es más ruidoso de lo que prefiero, así que estoy buscando recortarlo para algunos destinos. Típicamente sólo se necesitan los primeros 8 dígitos de un Guid para que los humanos (yo, por ejemplo) resuelvan problemas. He escrito un método de extensión para Guid llamado ShortForm(), y me gustaría que las salidas de Serilog para Consola, Archivo y Slack lo usen, en lugar del Guid completo.

public static string ShortForm(this Guid guid)
{
    if (guid == Guid.Empty) 
        return "????????";
    return guid.ToString().Substring(0, 8);
}

Intenté usar Destructure.ByTransforming() en el constructor pero no funcionó:

string outputTemplate = "[{@t:HH:mm:ss} {@l:u3}] {@m}\n{@x}";
ExpressionTemplate _consoleExpression = new ExpressionTemplate(outputTemplate, theme: TemplateTheme.Literate);

Log.Logger = new LoggerConfiguration().
   ... etc snipped ...
   Destructure.ByTransforming<guid>(g => g.ShortForm()).
   WriteTo.Console(formatter: _consoleExpression).
   CreateLogger();

En mi base de código:

//código
Log.Information("{@Guid} desconectado de {IP}", removedGuid, serverEvent.EndPoint); 

//salida de la consola
[12:30:54 INF] 00000000-0000-0000-0000-000000000000 desconectado de 127.0.0.1:59548

//o, si se autentica:
[12:34:01 INF] 3babffd8-68cb-41c2-87b6-d2beffbd431b disconnected from 127.0.0.1:51933

¿Hay alguna forma de hacer esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, se puede utilizar el método Destructure.ByTransforming() para transformar el Guid en su forma corta. También se puede utilizar la sintaxis @ en la plantilla de salida para especificar la transformación. Por ejemplo, se puede utilizar la siguiente plantilla de salida:

    string _outputTemplate = "[{@t:HH:mm:ss} {@l:u3}] {@m}\n{@Guid:l8}";
    ExpressionTemplate _consoleExpression = new ExpressionTemplate(_outputTemplate, theme: TemplateTheme.Literate);
    

    Esto mostrará el Guid en su forma corta:

    //salida en consola
    [12:30:54 INF] 00000000 desconectado de 127.0.0.1:59548
    
    //o, si se ha autenticado:
    [12:34:01 INF] 3babffd8 desconectado de 127.0.0.1:51933
    

Comments are closed.