ฉันต้องการตั้งชื่อไฟล์เช่น:
dd.mm.yyyy.log
เป็นไปได้อย่างไรกับ log4net
ฉันต้องการตั้งชื่อไฟล์เช่น:
dd.mm.yyyy.log
เป็นไปได้อย่างไรกับ log4net
คำตอบ:
ในไฟล์กำหนดค่า Log4net ของคุณให้ใช้พารามิเตอร์ต่อไปนี้กับ RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
เป็นไวยากรณ์ที่ถูกต้องและนี่คือคำตอบที่ดี การสูญเสียเกิดขึ้นได้อย่างไรฉันขอถามได้ไหม
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
สำหรับ RollingLogFileAppender คุณต้องมีองค์ประกอบและค่าเหล่านี้ด้วย:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
การใช้ Log4Net 1.2.13 เราใช้การตั้งค่าการกำหนดค่าต่อไปนี้เพื่อให้เวลาวันที่ในชื่อไฟล์
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
ซึ่งจะให้ไฟล์ตามหลักการต่อไปนี้: logname-2015-04-17.txt
ด้วยวิธีนี้คุณควรมีสิ่งต่อไปนี้เพื่อให้แน่ใจว่าคุณถือ 1 บันทึกต่อวัน
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
หากขนาดของไฟล์เป็นปัญหาสิ่งต่อไปนี้จะอนุญาตให้มีไฟล์ขนาด 5MB 500 ไฟล์จนกว่าจะถึงวันใหม่ CountDirectionอนุญาตให้มีการเรียงลำดับไฟล์จากน้อยไปมากหรือมากไปหาน้อยซึ่งไม่เป็นปัจจุบันอีกต่อไป
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
ฉันลงเอยด้วยการใช้ (สังเกตชื่อไฟล์ ".log" และเครื่องหมายคำพูดเดียวรอบ ๆ 'myfilename_'):
<rollingStyle value="Date" />
<datePattern value="'myfilename_'yyyy-MM-dd"/>
<preserveLogFileNameExtension value="true" />
<staticLogFileName value="false" />
<file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />
สิ่งนี้ทำให้ฉัน:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
ใช้ไม่ได้กับ log4net เวอร์ชันก่อนหน้า (เช่น v1.2.10) ตามที่อธิบายไว้ที่นี่
ฉันได้ลองคำตอบทั้งหมดแล้ว แต่มักจะมีบางอย่างหายไปและไม่ทำงานตามที่ฉันคาดไว้
จากนั้นฉันทดลองเล็กน้อยกับคำแนะนำที่ให้ไว้ในแต่ละคำตอบและประสบความสำเร็จด้วยการตั้งค่าต่อไปนี้:
<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<staticLogFileName value="false" />
<preserveLogFileNameExtension value="true" />
<datePattern value="-yyyyMMdd" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level - %message%newline" />
</layout>
</appender>
ปัญหาเกี่ยวกับชุดค่าผสมอื่น ๆ ของพารามิเตอร์คือไฟล์ล่าสุดไม่มีรูปแบบเวลาหรือมีการต่อท้ายรูปแบบเวลา.log20171215
ที่สร้างเวลาไฟล์ใหม่ (และประเภทไฟล์ใหม่! ) ในแต่ละวันหรือทั้งสองปัญหาปรากฏขึ้น
ตอนนี้ด้วยการตั้งค่านี้คุณจะได้รับไฟล์เช่นนี้:
LOG4NET_Sample_Activity-20171215.log
ซึ่งเป็นสิ่งที่ฉันต้องการ
สรุป:
อย่าใส่รูปแบบวันที่ใน<file value=...
แอตทริบิวต์เพียงกำหนดในรูปแบบdatePattern
.
ตรวจสอบให้แน่ใจว่าคุณมีpreserveLogFileNameExtension
ค่าtrue
ชุดแอตทริบิวต์
ให้แน่ใจว่าคุณมีstaticLogFileName
ค่าfalse
ชุด
ตั้งค่าrollingStyle
แอตทริบิวต์ค่าDate
ไป
เพื่อรักษานามสกุลไฟล์:
<log4net>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<maximumFileSize value="30MB" />
<staticLogFileName value="true" />
<preserveLogFileNameExtension value="true"/>
<datePattern value="ddMMyyyy" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
%date{yyyyMM}
และvalue="ddMMyyyy"
? รูปแบบวันที่มีผลคืออะไร?
ส่วนการกำหนดค่าเพิ่มเติมในการตอบกลับก่อนหน้าด้วย
...
...
<rollingStyle value="Composite" />
...
...
ใช้งานได้ตามรายการ แต่ฉันไม่ต้องใช้
<staticLogFileName value="false" />
. ฉันคิดว่า RollingAppender ต้อง (มีเหตุผล) ละเว้นการตั้งค่านั้นเนื่องจากตามความหมายไฟล์จะถูกสร้างขึ้นใหม่ในแต่ละวันเมื่อแอปพลิเคชันรีสตาร์ท / ใช้ซ้ำ บางทีอาจเป็นเรื่องสำคัญสำหรับการโรลโอเวอร์ทันทีทุกครั้งที่แอปพลิเคชันเริ่มต้น
ฉันย้ายการกำหนดค่าไปยังรหัสเพื่อให้สามารถแก้ไขได้ง่ายจาก CI โดยใช้ตัวแปรระบบ ฉันใช้รหัสนี้สำหรับชื่อไฟล์และผลลัพธ์คือ 'Log_03-23-2020.log'
log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
Hierarchy hierarchy = (Hierarchy)repository;
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = true;
roller.File = "Log_";
roller.DatePattern = "MM-dd-yyyy'.log'";
roller.Layout = patternLayout;
roller.MaxFileSize = 1024*1024*10;
roller.MaxSizeRollBackups = 10;
roller.StaticLogFileName = false;
roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);