Log4net cuộn tên tệp hàng ngày với ngày trong tên tệp


Câu trả lời:


103

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'" />

28
Có vẻ điều này đã được thăng cấp thành phần tử cấu hình: <datePattern value = "dd.MM.yyyy'.log '" /> Chúc mừng!
longda

3
@mstaessen <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?
Larry B

1
Nếu tôi nhớ không lầm thì nó đã diễn ra như thế này. Khi khởi động, log4net sẽ tạo tên tệp đầu tiên trong chuỗi cuộn. Nó sẽ phát hiện rằng tệp đó đã tồn tại và sau đó sẽ quyết định cuộn sang tệp thứ hai, nhưng khi tệp đó cũng đã tồn tại, nó sẽ không quyết định cuộn mà thay vào đó sẽ xóa nó và ghi đè mọi thứ trong tệp nhật ký thứ hai đó. Nó trôi qua hoàn toàn không được chú ý cho đến khi bạn cần các bản ghi của các khung thời gian xóa ...
mstaessen

207
<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>

1
Tôi nghĩ bạn nên làm nổi bật điểm chính của tham số nào để giải quyết vấn đề như @Mun đã làm. Tuy nhiên, tôi cũng đã bình chọn cho câu trả lời của bạn.
RDeveloper

1
Đó là yếu tố datePattern, kết hợp với các yếu tố staticLogFileName (và lưu ý các thuộc tính giá trị cho các phần tử tập tin) mà làm việc cho tôi
Michhes

Câu trả lời hoàn chỉnh!
Nagesh

32

Đố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" />

3
Điều này hoạt động, nhưng thêm ngày sau phần mở rộng tệp. Ví dụ: tôi nhận được các tệp nhật ký như Error.log20111104 - Có ai biết cách định dạng tên tệp tốt hơn một chút không?
LostNomad311

Đây là cách để định dạng tên tệp tốt hơn: stackoverflow.com/questions/615092/…
LostNomad311

staticLogFileName được sử dụng để làm gì? Tôi chỉ muốn tệp nhật ký được chuyển sang tên mới sau khi ngày kết thúc. Tôi muốn sử dụng một trình theo dõi nhật ký để xem xét từng thời điểm cụ thể.
nhật

22

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" />

18

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
.
.

preserveLogFileNameExtensionkhô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
Dmitry Karpenko

13

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


Bạn cũng có thể đặt RollStyle thành Composite, cuộn theo cả ngày và kích thước.
Simon Tewsi

1
Hoạt động tuyệt vời. Tôi cũng muốn nói thêm trong tóm tắt: Hãy chắc chắn rằng bạn có các thiết lập giá trị false staticLogFileName
Randall Flagg

5

Để 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>

tại sao có %date{yyyyMM}value="ddMMyyyy" ? mẫu ngày có hiệu lực là gì?
Allan Ruin

Tôi nghĩ datePattern là cho tên tập tin nhưng% ngày {} YYYYMM là dành cho các thư mục cha (tôi muốn nó như vậy)
Fourat

Thuộc tính datePattern đặt thời gian luân phiên cho Date RollStyle. Xem logging.apache.org/log4net/release/config-examples.html trong RollingFileAppender. "Ví dụ: mẫu ngày" yyyyMMdd "sẽ diễn ra hàng ngày. Xem System.Globalization.DateTimeFormatInfo để biết danh sách các mẫu có sẵn."
Ryan Buddicom

@rbuddicom vâng nhưng câu hỏi là về cách giữ lại phần mở rộng tệp.
Fourat

Tôi biết, Allan đã đặt câu hỏi về mục đích của 'value = "ddMMyyyy"'. Nhận xét của bạn "Tôi nghĩ datePattern dành cho tên tệp" là không chính xác về mặt đó.
Ryan Buddicom

0

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.


Đối với tôi, nó sẽ không làm việc nếu không có sự <staticLogFileName value = "false" />
Nurettin

tôi là tốt, phải thiết lập staticLogFileName false nếu không nó sẽ không đăng nhập
oonyalo

0

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);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.