Pregunta

Estoy usando AdoNetAppender para registrar mensajes. Agregué el patrón de conversión% property {log4net: HostName} al parámetro del mensaje.

<parameter>
      <parameterName value="@message"/>
      <dbType value="String"/>
      <size value="4000"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%property{log4net:HostName}] - %message"/>
      </layout>
</parameter>

La salida es como

[ nombre de host ] - foo bar.

Pero quiero la salida como

[ HOSTNAME ] - foo bar.

¿Cómo puedo poner el nombre de host en mayúsculas usando patrones de conversión?

Saludos,

Cankut

¿Fue útil?

Solución

La solución sugerida por Ron Grabowski es extender PatternConverter.

public class HostNameToUpperConverter : PatternConverter
{
    protected override void Convert(TextWriter writer, object state)
    {
        string hostName = (string)GlobalContext.Properties[LoggingEvent.HostNameProperty];
        writer.Write(hostName.ToUpper());
    }
}

uso en el archivo de configuración:

<layout type="log4net.Layout.PatternLayout">
        <converter>
          <name value="hostNameToUpper" />
          <type value="MyApplication.HostNameToUpperConverter" />
        </converter>
        <conversionPattern value="[%hostNameToUpper] - %message" />
</layout>

Otros consejos

FWIW (tal vez alguien más lo encuentre útil), NLog 2.0 (y tal vez la actualización 1.0) tiene Se ha añadido un diseño " wrappers " que permiten modificar la salida de un diseño. Vea este enlace , hacia la parte inferior.

Entre los envoltorios se encuentran mayúsculas, minúsculas, espacios en blanco de recorte, almohadilla y algunos más. Por lo tanto, probablemente podría definir un diseño que especifique los campos que se incluirán en la salida y "ajustar". ya sea todo o parte de él en mayúscula " envoltura. Realmente no sé la sintaxis exacta, sé que puede incluir diseños en otros diseños para poder definir un diseño para "nombre de host", envolverlo en mayúscula " wrapper, y luego incluir ese diseño en el diseño final. En pseudocódigo (pseudocódigo de archivo de configuración, no pseudocódigo de código) (¡muy pseudocódigo!):

var host=${gdc:hostname}
var uhost=${uppercase=true,inner=host}

Ahora uhost se puede incluir en el " real " diseño:

${datetime} | ${uhost} | ${message}

O, puede hacerlo así:

${datetime} | ${uppercase=true, inner=${gdc:hostname}} | ${message}

Tenga en cuenta que en realidad no he intentado hacer esto en NLog, solo voy por lo que está en su sitio web.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top