2013-01-08 27 views
6

Tôi muốn gửi nhật ký log4net hiện tại làm tệp đính kèm email bằng cách sử dụng System.Net.Mail.Attachment nhưng khi tôi chuyển vào đường dẫn tệp, IOException bị ném.Gửi email nhật ký log4net dưới dạng System.Net.Mail.Attachment ném IOException (quá trình bị khóa)

Attachment mailAttachment = new Attachment(logPath); 

Quá trình này không thể truy cập các tập tin 'C: \ Log \ log4net.log' vì nó đang được sử dụng bởi quá trình khác

Cấu hình appender trông như thế này:

<appender name="RootRollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <param name="File" value="C:\Log\log4net.log" /> 
    <param name="AppendToFile" value="true" /> 
    <param name="MaxSizeRollBackups" value="10" /> 
    <param name="MaximumFileSize" value="10024KB" /> 
    <param name="RollingStyle" value="Size" /> 
    <param name="StaticLogFileName" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%date [%username|%thread] %-5level %logger: %message%newline" /> 
    </layout> 
</appender> 

Có cách nào để giải quyết vấn đề này không? Tôi có thể sao chép tệp nhật ký hoặc bằng cách nào đó phát hành tệp đó khỏi quá trình khóa không?

+1

Loại trình bổ sung nào bạn đang sử dụng trong tệp .config bạn có thể đăng phần này trông như thế nào cho người mới bắt đầu '' – MethodMan

Trả lời

15
<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file value="${TMP}\log-file.txt" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 

sử dụng <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> sẽ thông báo cho log4net chỉ khóa tệp trong một thời gian ngắn khi thực hiện việc ghi thực tế. Có một hình phạt hiệu suất nhỏ, nhưng cho phép bạn làm những việc như thêm nó dưới dạng tệp đính kèm dễ dàng hơn nhiều.

Nếu không, log4net sẽ khóa tệp không chính xác trong khi quá trình đang chạy.

Các vấn đề liên quan