จาก Blog ตอนก่อนของ Site ได้ Deploy ตัว .Net App ไว้ที่ Windows Server ไว้ที่ Drive C: แล้วให้ User Remote เข้ามาใช้งานครับ แต่พอเวลามีปัญหามันดัน Write Log ไม่ได้ครับ เพราะ Application ทุกตัวที่ที่รันขึ้นมา ดันเขียน Log ลงไปที่ Path และไฟล์ชื่อเดียวกันครับ ทำให้ User สามารถเปิดโปรแกรมใช้งานได้แค่ 1 Instance เท่านั้นครับ เมื่อทาง Dev ต้องการหาสาเหตุของ Defect บางข้อครับ แต่เรื่องนี้มันก็ขัดใจสำหรับ User มากๆ ที่ไม่สามารทำงานได้ครับ
สำหรับทางแก้ - ใช้ Log4Net มันเขียน Log File ตาม Process Id ของ exe ที่เปิดอยู่ครับ โดยสามารถไปแก้ที่ตัว Appender ได้ ดังนี้
- ของเดิม - ที่ RollingLogFileAppender เขียน Log โดยระบุชื่อไฟ์ไปตรงๆเลยครับ
<file value="C:\\Ext\\Log\\EXTENSION_LOG.txt" />
- ของใหม่ - มีการปรับที่ RollingLogFileAppender ให้ Log มันเข่ียนแยกตามไฟล์ โดยใช้ Log4Net Pattern String ครับ ซึ่งมีการกำหนด Pattern จาก Process Id ของ exe ที่ เปิดอยู่ในหน้าจอ Task Manager ครับ โดยดึง Process Id จาก Config [%processid] ส่วนวันที่อันนี้ผมเพิ่มเองครับ จะได้ดู Log ง่ายๆ โดยกำหนด Config ดังนี้ %utcdate{yyyy-MM-dd}
<file type="log4net.Util.PatternString" value="C:\\Ext\\Log\\EXTENSION_LOG-%utcdate{yyyy-MM-dd}-[%processid].txt" />
สำหรับตัว Appender เต็มๆครับ
โดยการเดิม [%processid] ลงไปใน value ที่กำหนด Path และชื่อไฟล์ ในส่วนของ PatternString
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file type="log4net.Util.PatternString" value="C:\\Ext\\Log\\EXTENSION_LOG-%utcdate{yyyy-MM-dd}-[%processid].txt" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePattern value="yyyyMMdd" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level (%file:%line) [%property{NDC}] - %message%newline" /> </layout> </appender>
ตัวอย่างชื่อของ Log File ที่ได้มาครับ
- EXTENSION_LOG-2018-04-16-[4588] โดยเป็น Log ของ Application Extension ณ วันที่ 2018-04-16 และมี Process Id = 4588
Discover more from naiwaen@DebuggingSoft
Subscribe to get the latest posts sent to your email.