كيفية جعل جزء من log4net رسالة كبيرة
سؤال
أنا باستخدام AdoNetAppender إلى سجل الرسائل.لقد أضفت %الملكية{log4net:المضيف} تحويل نمط الرسالة المعلمة.
<parameter>
<parameterName value="@message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%property{log4net:HostName}] - %message"/>
</layout>
</parameter>
الإخراج هو مثل
[اسم المضيف] - فو بار.
ولكن أريد إخراج مثل
[اسم المضيف] - فو بار.
كيف يمكنني جعل المضيف الكبيرة باستخدام تحويل الأنماط ؟
التحيات ،
Cankut
المحلول
الحل المقترح من قبل رون غرابوفسكي هو توسيع PatternConverter.
public class HostNameToUpperConverter : PatternConverter
{
protected override void Convert(TextWriter writer, object state)
{
string hostName = (string)GlobalContext.Properties[LoggingEvent.HostNameProperty];
writer.Write(hostName.ToUpper());
}
}
الاستخدام في ملف التكوين:
<layout type="log4net.Layout.PatternLayout">
<converter>
<name value="hostNameToUpper" />
<type value="MyApplication.HostNameToUpperConverter" />
</converter>
<conversionPattern value="[%hostNameToUpper] - %message" />
</layout>
نصائح أخرى
FWIW (ربما شخص آخر سوف تجد هذه مفيدة) ، NLog 2.0 (و ربما 1.0 تحديث) قد أضاف بعض تخطيط "مغلفة" التي تسمح تعديل الناتج من التخطيط.ترى هذا الرابط, نحو القاع.
بين مغلفة أحرف كبيرة أو صغيرة ، وتقليم بيضاء, وسادة, وعدد قليل من أكثر.لذا ربما يمكن تعريف التخطيط الذي يحدد المجالات التي ينبغي إدراجها في الإخراج و "التفاف" إما كله أو جزء منه في "الكبيرة" المجمع.أنا حقا لا أعرف بالضبط الجملة أعلم أنك يمكن أن تتضمن تخطيطات في تخطيطات أخرى لذا يمكن تعريف تخطيط "اسم المضيف" ، ألفه في "الكبيرة" المجمع ثم تشمل تخطيط في تخطيط النهائي.في شبة الكود (ملف التكوين شبة الكود ، وليس كود شبة الكود) (جدا الزائفة!):
var host=${gdc:hostname}
var uhost=${uppercase=true,inner=host}
الآن uhost يمكن تضمينها في "ريال مدريد" تخطيط:
${datetime} | ${uhost} | ${message}
أو قد تفعل ذلك من هذا القبيل:
${datetime} | ${uppercase=true, inner=${gdc:hostname}} | ${message}
علما بأنني لم جربت هذه الطريقة في NLog, أنا مجرد الذهاب من خلال ما هو على الموقع.