Câu trả lời:
Trong tệp cấu hình Log4net của bạn, hãy sử dụng tham số sau với RollingFileAppender:
<param name="DatePattern" value="dd.MM.yyyy'.log'" />
<preserveLogFileNameExtension value="true" />
là cú pháp chính xác và đây là một câu trả lời tuyệt vời. Làm thế nào mà mất mát xảy ra, tôi có thể hỏi?
<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>
Đối với RollingLogFileAppender, bạn cũng cần các yếu tố và giá trị sau:
<rollingStyle value="Date" />
<staticLogFileName value="false" />
Sử dụng Log4Net 1.2.13, chúng tôi sử dụng cài đặt cấu hình sau để cho phép ngày giờ trong tên tệp.
<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />
Cái nào sẽ cung cấp các tệp theo quy ước sau: logname-2015-04-17.txt
Với điều này, tốt nhất bạn nên có những thứ sau để đảm bảo bạn đang nắm giữ 1 nhật ký mỗi ngày.
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />
Nếu kích thước của tệp là mối quan tâm, điều sau đây cho phép 500 tệp có kích thước 5MB cho đến một ngày mới sinh ra. CountDirection cho phép đánh số tăng dần hoặc giảm dần các tệp không còn hiện tại.
<maxSizeRollBackups value="500" />
<maximumFileSize value="5MB" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<CountDirection value="1"/>
<staticLogFileName value="true" />
Tôi đã kết thúc bằng cách sử dụng (lưu ý tên tệp '.log' và các dấu ngoặc kép xung quanh '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" />
Điều này mang lại cho tôi:
myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.
preserveLogFileNameExtension
không làm việc cho các phiên bản trước đó của log4net (ví dụ v1.2.10) vì nó được mô tả ở đây
Tôi đã thử tất cả các câu trả lời, nhưng luôn có một cái gì đó bị thiếu và không hoạt động như mong đợi đối với tôi.
Sau đó, tôi đã thử nghiệm một chút với các gợi ý được đưa ra trong mỗi câu trả lời và đã thành công với cài đặt sau:
<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>
Vấn đề với các kết hợp tham số khác là tệp mới nhất không có mẫu thời gian hoặc mẫu thời gian được thêm vào .log20171215
để tạo ra thời gian tệp mới (và một loại tệp mới ! ) Mỗi ngày - hoặc cả hai vấn đề đều xuất hiện.
Bây giờ với cài đặt này, bạn sẽ nhận được các tệp như sau:
LOG4NET_Sample_Activity-20171215.log
đó là những gì tôi muốn.
Tóm lại:
Không đặt mẫu ngày trong <file value=...
thuộc tính, chỉ cần xác định nó trong datePattern
.
Đảm bảo rằng bạn đã đặt thuộc tính preserveLogFileNameExtension
giá trịtrue
.
Đảm bảo rằng bạn đã đặt staticLogFileName
giá trịfalse
.
Đặt giá trịrollingStyle
thuộc tính thành .Date
Để duy trì phần mở rộng tệp:
<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}
và value="ddMMyyyy"
? mẫu ngày có hiệu lực là gì?
Phần cấu hình mở rộng trong phản hồi trước với
...
...
<rollingStyle value="Composite" />
...
...
công việc được liệt kê nhưng tôi không phải sử dụng
<staticLogFileName value="false" />
. Tôi nghĩ rằng RollingAppender phải (một cách hợp lý) bỏ qua cài đặt đó vì theo định nghĩa, tệp được xây dựng lại mỗi ngày khi ứng dụng khởi động lại / sử dụng lại. Có lẽ nó quan trọng đối với việc di chuyển ngay lập tức MỌI lần ứng dụng khởi động.
Tôi đã chuyển cấu hình sang mã để có thể dễ dàng sửa đổi từ CI bằng cách sử dụng biến hệ thống. Tôi đã sử dụng mã này cho tên tệp và kết quả là '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);