2009-12-21 21 views
11

Tôi làm cách nào để đăng nhập vào các thư mục đặc biệt (ví dụ: %APPDATA%) bằng tệp app.config?Làm cách nào để đăng nhập vào Thư mục đặc biệt bằng log4net?

Tôi có thể làm điều đó theo lập trình, nhưng tôi cần để có thể sử dụng tệp app.config để định cấu hình. Tôi đã thấy một bài viết sử dụng %envFolderPath. Nó không có trong phiên bản phát hành mới nhất, nhưng chỉ có trong mã mới nhất của họ.

Dưới đây là mã tôi đặt nhật ký vào các thư mục đặc biệt theo lập trình.

public void ExampleLog 
{ 
    XmlConfigurator.Configure(); 

    var fileName = GetFileName(); 
    var appender = new log4net.Appender.RollingFileAppender 
    { 
     Layout = new log4net.Layout.PatternLayout("%d - %m%n"), 
     File = fileName, 
     MaxSizeRollBackups = 10, 
     MaximumFileSize = "100MB", 
     AppendToFile = true, 
     Threshold = Level.Debug 
    }; 

    appender.ActivateOptions(); 
    BasicConfigurator.Configure(appender); 
} 

private static string GetFileName() 
{ 
    const string subPath = "MySubFolder"; 
    var path = String.Format(@"{0}\{1}", Environment.GetFolderPath (Environment.SpecialFolder.CommonApplicationData), subPath); 
    const string logName = "Log.txt"; 
    return Path.Combine(path, logName); 
} 
+1

có thể trùng lặp của [Cách chỉ định thư mục dữ liệu ứng dụng chung cho log4net?] (Http://stackoverflow.com/questions/468989/how-to-specify-common-application-data-folder-for- log4net) –

Trả lời

11

Chắc chắn cú pháp cho điều này có sẵn trong bản phát hành hiện tại.

<file type="log4net.Util.PatternString" value="%env{APPDATA}\\MyApp\\Log.txt" /> 

Nếu bạn cần một cái gì đó nhiều hơn, bạn có thể nhìn vào tùy chọn của lớp con của lớp PatternString, như mô tả ở đây: Log4Net can’t find %username property when I name the file in my appender

+0

Xin lỗi vì đã trả lời muộn. Cảm ơn! – user9969

+0

Tôi không nghĩ rằng đây là một ý tưởng tốt, bởi vì trên Vista và Windows 7,% APPDATA% giải quyết thư mục * roaming * của người dùng, có nghĩa là các tệp nhật ký sẽ được đồng bộ hóa với máy chủ miền và được tải xuống mỗi lần nhật ký người dùng in. Xem nhận xét tại đây: http://stackoverflow.com/questions/1572934/where-to-store-an-application-log-file-on-windows/1573015#1573015 – GuyBehindtheGuy

+2

Nếu bạn lo ngại về thời gian để đồng bộ hóa dữ liệu chuyển vùng, sau đó sử dụng% LOCALAPPDATA% (tương đương không chuyển vùng). Tôi nghĩ rằng thường sẽ tốt hơn trong bất kỳ trường hợp nào đối với các tệp nhật ký, bất kể chúng lớn như thế nào. –

4

Kiểm tra các mẫu RollingFileAppender cấu hình trên các tài liệu log4net (cho tất cả các thông số khác) .

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="log.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="100KB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.SimpleLayout" /> 
    </layout> 
</appender> 

Tôi đã tham chiếu biến môi trường (bao gồm các thư mục đặc biệt) với định dạng biến log4net cơ bản ${NAME}. Và thẻ file không cần phải có chỉ định PatternLayout, nó được ngụ ý.

<file value="${APPDATA}\log.txt" /> 
Các vấn đề liên quan