2010-05-24 25 views
12

Khi tiêu đề ngụ ý cách tôi có thể tạo tệp nhật ký mới mỗi ngày trong C#? Bây giờ chương trình có thể không nhất thiết chạy cả ngày lẫn đêm nhưng chỉ được gọi trong giờ làm việc. Vì vậy, tôi cần phải làm hai việc.Tạo một tệp nhật ký mới mỗi ngày

  1. Làm cách nào để tạo tệp nhật ký mới mỗi ngày? Tệp nhật ký sẽ có tên theo định dạng như MMDDYYYY.txt
  2. Tôi làm cách nào để tạo tệp ngay sau nửa đêm trong trường hợp nó chạy vào tất cả các giờ trong đêm?
+0

Hãy xem tại http://stackoverflow.com/a/8255588/900284 Nó cũng rất tốt đẹp. –

+3

Tôi muốn nêu lên điều này nếu bạn đã chọn câu trả lời được chấp nhận. – Joel

Trả lời

3

Bạn không cần phải tạo nó tại một thời điểm cụ thể- trong trường hợp đơn giản nhất bạn có thể kiểm tra xem có logfile với ngày hôm nay là tên khi bạn bắt đầu dịch vụ ghi nhật ký cho ứng dụng hay không không phải là bạn có thể tạo ra nó trước khi bạn bắt đầu phụ thêm nó.

Trường hợp duy nhất bạn cần phải đặc biệt biết về thiết lập này là khi ứng dụng chạy quá nửa đêm.

3

sử dụng log4net. Đây là một trong những thư viện được sử dụng phổ biến nhất để ghi nhật ký.

Bạn có thể dễ dàng định cấu hình theo ý muốn, vui lòng tham khảo mẫu.

+0

Cụ thể: RollingFileAppender - ,

1

Khi bạn đăng nhập nội dung nào đó, hãy kiểm tra xem tệp có tồn tại ngày hiện tại không, nếu không - hãy tạo tệp đó. Đơn giản như vậy :)

if(fileExists(todaysDate + ".txt")){ 
    appendToLogFile(message); 
}else{ 
    createFile(todaysDate + ".txt"); 
    appendToLogFile(message); 
} 
0

Không cần để tạo ra nó cho đến khi bạn cần đến nó, sử dụng: (. Hoặc có thể là một bảng mã khác nhau)

file = new StreamWriter(path, true, new UTF8Encoding(false)); 

Điều này sẽ tạo ra các tập tin là nó không tồn tại hoặc bắt đầu chắp thêm vào nó.

Sau đó, việc tạo tên tệp và chỉ sử dụng tên đó là vấn đề.

6

tôi khuyên bạn nên một cái gì đó như thế này:

string logFile = DateTime.Now.ToString("yyyyMMdd") + ".txt"; 
if (!System.IO.File.Exists(logFile)) 
{ 
    System.IO.File.Create(logFile); 
} 
//append to logFile here... 

Có một lý do bạn muốn một cái gì đó để tạo ra nó sau nửa đêm? Tại sao không chỉ tạo ra nó nếu nó không tồn tại khi bạn đi để đăng nhập lỗi?

Cũng lưu ý rằng tôi đã thay đổi định dạng ngày. Điều này sẽ cho phép bạn sắp xếp các tập tin theo tên và nhận được chúng theo thứ tự. Tôi luôn sử dụng định dạng này khi gây rối với các ngày theo bất kỳ cách nào.

37

This example cho biết cách định cấu hình RollingFileAppender để cuộn tệp nhật ký trong một khoảng thời gian. Ví dụ này sẽ cuộn tệp nhật ký mỗi phút! Để thay đổi thời gian cán, điều chỉnh giá trị DatePattern. Ví dụ: mẫu ngày "yyyyMMdd" sẽ cuộn mỗi ngày.
Xem System.Globalization.DateTimeFormatInfo để biết danh sách các mẫu có sẵn.

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\temp\rolling.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="yyyyMMdd-HHmm" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 
+3

+1 để đề cập đến Log4Net – Pretzel

+0

Bạn có thể sử dụng Kích thước và Ngày cùng nhau để cuộn kiểu không? – eaglei22

+1

Có, bạn có thể sử dụng Kích thước và Ngày cùng nhau rollingstyle Composite. Xem tại đây: http://logging.apache.org/log4net/release/config-examples.html#rollingfileappender Hộp thứ 3 trong tiêu đề Rolling File Appender –

5

Dùng thử NLog (nlog-project.org). Nó rất linh hoạt và dễ làm việc hơn Log4Net theo ý kiến ​​của tôi.

Ví dụ về NLog.cấu hình:

<?xml version="1.0" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 

    <targets> 
     <target name="file" xsi:type="File" 
      layout="${longdate} ${logger} ${message}" 
      fileName="${basedir}/${shortdate}/${windows-identity:domain=false}.${level}.log" /> 
    </targets> 

    <rules> 
     <logger name="*" minlevel="Debug" writeTo="file" /> 
    </rules> 
</nlog> 

Để biết thêm ví dụ (bao gồm cả chỉ tiêu khai thác gỗ khác ngoài File) thấy NLog configuration examples on Github

+3

Bạn không trả lời được câu hỏi nào cả. Ví dụ về làm thế nào để làm điều này trong NLog ...? –

+0

@notfed đã thêm tệp cấu hình mẫu. – kwcto

8

Những người khác đã đề cập Log4Net, vì vậy tôi sẽ đi trước và dắt the Block Enterprise Library Logging, mà cũng khá có khả năng làm những gì bạn muốn.

Bạn có thể vui lòng bao gồm một số mã cho biết dễ dàng tạo cuộn này mỗi ngày không? Có dễ hơn ví dụ log4Net không? - Daniel Dyson

Chắc chắn. Thông thường, người ta sẽ sử dụng Enterprise Library Configuration Tool để tạo cấu hình; công cụ này mất một chút quen với việc sử dụng, nhưng một khi bạn hiểu cách nó hoạt động, nó khá mạnh mẽ. Điều đó nói rằng, bạn cũng có thể chỉnh sửa app.config bằng tay.

Đây là đầu ra của công cụ mà tôi đã đề cập, đưa mọi thứ vào một tệp phẳng cuộn mỗi ngày (hoặc nếu vượt quá 2MB). Định dạng là mặc định do công cụ cung cấp.

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
     <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    </configSections> 
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="Category"> 
     <listeners> 
      <add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       formatter="Text Formatter" rollInterval="Day" rollSizeKB="2000" /> 
     </listeners> 
     <formatters> 
      <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
       template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
       name="Text Formatter" /> 
     </formatters> 
     <categorySources> 
      <add switchValue="All" name="Category"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </add> 
     </categorySources> 
     <specialSources> 
      <allEvents switchValue="All" name="All Events"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </allEvents> 
      <notProcessed switchValue="All" name="Unprocessed Category"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </notProcessed> 
      <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
       <listeners> 
        <add name="Rolling Flat File Trace Listener" /> 
       </listeners> 
      </errors> 
     </specialSources> 
    </loggingConfiguration> 
</configuration> 
+0

Bạn có thể vui lòng bao gồm một số mã cho biết việc tạo cuộn này mỗi ngày dễ dàng như thế nào không? Có dễ hơn ví dụ log4Net không? –

+1

@Daniel Dyson: đã xong. – Randolpho

+0

+1 Cảm ơn. Điều đó thú vị –

3

Dưới đây là trình bổ sung XML mà tôi hiện đang sử dụng.

Dựa trên yêu cầu của bạn của
1) tạo ra một tập tin log cho ngày một lần và,
2) để có phần mở rộng của txt,
bạn nên sử dụng một XML tương tự như những gì là bên dưới.
XML bên dưới sẽ tạo tệp nhật ký có tên là system-20121106.txt.

Vấn đề duy nhất là do giá trị tệp là nhật ký/hệ thống- tệp của bạn trong khi tệp đang viết cho ngày hiện tại sẽ là hệ thống-. Để giải quyết vấn đề này, bạn phải đặt giá trị tệp của mình thành nhật ký/system.txt, nhưng sau đó bạn sẽ nhận được tệp system.txt.20121106.txt làm tệp cuối cùng.

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs/system-" /> 
    <appendToFile value="true"/> 
    <countDirection value="-1"/> 
    <rollingStyle value="Date" /> 
    <datePattern value="yyyyMMdd'.txt'" /> 
    <maxSizeRollBackups value="0" /> 
    <maximumFileSize value="10000KB" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d [%t] %-5p %c - %m%n" /> 
    </layout> 
</appender> 
Các vấn đề liên quan