2013-07-10 56 views
9

Đây là một câu hỏi thực sự phổ biến, nhưng tôi đã không thể có được câu trả lời để làm việc. Đây là tệp cấu hình của tôi:log4net: Cách đặt tên tệp nhật ký động?

<?xml version="1.0" encoding="utf-8"?> 
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="CraneUserInterface.log" /> 
    <appendToFile value="true" /> 
    <maxSizeRollBackups value="90" /> 
    <rollingStyle value="Size" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFile" /> 
    </root> 

Nhưng tôi cần xác định tên tệp nhật ký thực tế trong thời gian chạy. Tôi tìm thấy một ví dụ tốt đẹp here, nhưng khi tôi cố gắng lặp qua bộ sưu tập được trả về bởi cuộc gọi đến GetIterators(), tôi thấy rằng bộ sưu tập đó trống.

Tôi cần thay đổi tên "CraneUserInterface.log" thành "CraneUserInterface_1.log" hoặc 2 hoặc 3, tùy thuộc vào chương trình nào đó đọc vào thời gian chạy. Làm thế nào tôi có thể làm điều đó?

Dưới đây là đường chuyền đầu tiên của tôi tại sử dụng mã được trình bày trong mẫu:

static bool ChangeLogFileName(string AppenderName, string NewFilename) 
{   
    // log4net.Repository.ILoggerRepository RootRep; 
    // RootRep = log4net.LogManager.GetRepository(); 
    log4net.Repository.ILoggerRepository RootRep = m_logger.Logger.Repository; 
    foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders()) 
    { 
    string appenderName = iApp.Name; 
    if (iApp.Name.CompareTo(AppenderName) == 0 
     && iApp is log4net.Appender.FileAppender) 
    { 
     log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp; 
     fApp.File = NewFilename; 
     fApp.ActivateOptions(); 
     return true; // Appender found and name changed to NewFilename 
    } 
} 
return false; // appender not found 
} 

Cảm ơn rất nhiều!

+0

Mặc dù đọc hai lần, tôi không có ý tưởng tại sao bạn sẽ muốn làm điều này. –

+1

Đây là để sử dụng trong một máy tính xách tay sẽ được trong cab của một cần cẩu trong một nhà máy ủ. Nhà máy có 3 cần cẩu. Vì tôi không ở nhà máy, tôi cũng sẽ không ở trong tương lai gần, tôi có một mô phỏng giả vờ là cả ba cần cẩu. Sẽ có 3 trường hợp runniing chương trình này cùng một lúc. Tôi cần phải theo dõi các sự kiện cho từng cần cẩu riêng biệt, và tôi có lẽ nên tránh bất kỳ cơ hội nào của hai trường hợp chương trình này ghi vào cùng một tệp nhật ký cùng một lúc. –

+0

Tôi nghĩ rằng bản năng ruột của tôi đã đúng. Bạn đang cố gắng giải quyết vấn đề sai. –

Trả lời

4

bạn có thể sử dụng chức năng này: trong chức năng này trước tiên hãy lấy vị trí tệp bạn đặt trong webconfig và sau đó bạn có thể thêm bất kỳ đường dẫn nào bạn muốn! như ngày! khách hàng của chúng ta ! hay .....

webconfig:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\\t4\\"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Composite"/> 
    <datePattern value="_yyyy-MM-dd.lo'g'"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="1MB"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date User:%identity IP:%X{addr} Browser: %X{browser} Url: %X{url} [%thread] %-5level %c:%m%n"/> 
    </layout> 
</appender> 

Chức năng:

public static void ChangeFileLocation(string _CustomerName,string _Project) 
{ 
    XmlConfigurator.Configure(); 
    log4net.Repository.Hierarchy.Hierarchy h =(log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(); 

    foreach (IAppender a in h.Root.Appenders) 
    { 
     if (a is FileAppender) 
     { 
      FileAppender fa = (FileAppender)a; 
      string sNowDate= DateTime.Now.ToLongDateString(); 
      // Programmatically set this to the desired location here 
      string FileLocationinWebConfig = fa.File; 
      string logFileLocation = FileLocationinWebConfig + _Project + "\\" + _CustomerName + "\\" + sNowDate + ".log"; 

      fa.File = logFileLocation; 
      fa.ActivateOptions(); 
      break; 
     } 
    } 
} 

và kết quả như thế này: C: \ t4 \ TestProject \ Customer1 \ Thứ Bảy Tháng Tám 31, 2013.log

+0

vui lòng không đăng câu trả lời chính xác cho nhiều câu hỏi - chúng không thực sự phù hợp hoặc câu hỏi là trùng lặp và phải được gắn cờ như vậy – kleopatra

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