كيف يمكنني تكوين RollingFileAppender لفة حسب التاريخ والحجم مع log4net?
-
04-07-2019 - |
سؤال
أنا تكوين log4net إلى استخدام مركب RollingFileAppender بحيث الملف الحالي هو دائما اسمه السجل.سجل وكل اللاحقة تسمية الملفات السجل-YYYY.مم.دد.يليها.سجل حيث بعدها هو رقم التسلسل إذا سجل يتجاوز حجم معين خلال يوم واحد.للأسف كان لدي القليل جدا من النجاح في تكوين هذا الإعداد.
تحرير:
بلدي التكوين الحالي هو لصق أدناه.وقد تم تحديثه على أساس العديد من الإجابات التي يحصل لي قريب بما يكفي احتياجاتي.هذا يولد ملفات من صيغة: logfile_YYYY.مم.دد.السجل.بعدها
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs\\logfile"/>
<staticLogFileName value="false"/>
<appendToFile value="true"/>
<rollingStyle value="Composite"/>
<datePattern value="_yyyy.MM.dd".log""/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="75KB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="FATAL" />
</filter>
</appender>
</log4net>
ملاحظة واحدة مثيرة للاهتمام ، ووضع
<staticLogFileName value="false"/>
أن الأسباب الحقيقية المسجل إلى عدم إرسال أي ملفات.
المحلول
نحن نستخدم ما يلي (في Log4J):
<appender name="roller" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="Applog.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[slf5s.start]%d{DATE}[slf5s.DATE]%n%p[slf5s.PRIORITY]%n%x[slf5s.NDC]%n%t[slf5s.THREAD]%n%c[slf5s.CATEGORY]%n%l[slf5s.LOCATION]%n%m[slf5s.MESSAGE]%n%n"/>
</layout>
</appender>
هذا يعطينا Applog.السجل.yyyy-MM-dd الملفات
نصائح أخرى
وفقا log4net RollingFileAppender البرمجية المصدر:
protected string GetNextOutputFileName(string fileName)
{
if (!m_staticLogFileName)
{
fileName = fileName.Trim();
if (m_rollDate)
{
fileName = fileName + m_now.ToString(m_datePattern, System.Globalization.DateTimeFormatInfo.InvariantInfo);
}
if (m_countDirection >= 0)
{
fileName = fileName + '.' + m_curSizeRollBackups;
}
}
return fileName;
}
لذا أعتقد أنه ليس من الممكن لإنشاء ملف سجل مع اسم تحتاج إليها.أعتقد أنه شيء مثل logfileYYYY-MM-dd.n.log
أو ما شابه ذلك.
محاولة تعيين هذه الخاصية إلى true:
preserveLogFileNameExtension value="true"
أعتقد أن هذه الخدعة سوف تساعدك!ومع ذلك ، preserveLogFileNameExtension الملكية يحتاج إلى أحدث نسخة من log4net ، يمكنك العثور عليها هنا: logging.apache.org/log4net/download.html
علما بأن هذه الحالة
<maxSizeRollBackups value="10"/>
سيتم تجاهلها.
ترى هذا الجواب مماثلة log4net السؤال