Cómo hacer que una parte del mensaje log4net sea mayúscula
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
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.