2015-10-19 58 views
-1

多個用戶一次寫入文件的記錄器。多個用戶的記錄器

我在我的應用程序中使用Logger。它一次對單個用戶來說工作正常。但是對於多個用戶來說,它顯示的例外情況如下,System.IO.IOException: The process cannot access the file '\19-Oct-2015_TraceLogFile.txt' because it is being used by another process.

下面的logger.cs頁面代碼。

public static class Logger 
{ 
    static string ErrorLogFile, TraceLogFile; 

    static Logger() 
    { 
     string fpath = ConfigurationManager.AppSettings["telogpath"]; 

     ErrorLogFile = fpath + string.Format("{0:dd-MMM-yyyy}", DateTime.Now) + "_ErrorLogFile.txt"; 
     TraceLogFile = fpath + string.Format("{0:dd-MMM-yyyy}", DateTime.Now) + "_TraceLogFile.txt"; 

    } 

    private static string GetExceptionMessage(Exception ex) 
    { 
     string retValue = string.Format("Message: {0}\r\nStackTrace: {1}", ex.Message, ex.StackTrace); 
     if (ex.InnerException != null) 
     { 
      retValue = retValue + string.Format("\r\n\r\nInner Exception: {0}", GetExceptionMessage(ex.InnerException)); 
     } 
     return retValue; 
    } 

    public static void WriteException(Exception ex, string AdditionalInfo) 
    { 
     string finalMessage = string.Format("{0:dd-MMM-yyyy hh:mm:ss.fff}: {1}\r\n\r\nAdditional Info: {2}\r\n{3}\r\n\r\n", DateTime.Now, GetExceptionMessage(ex), AdditionalInfo, new string('-', 60)); 

     File.AppendAllText(ErrorLogFile, finalMessage); 
    } 

    public static void WriteLine(string Message) 
    { 
     string finalMessage = string.Format("{0:dd-MMM-yyyy hh:mm:ss.fff}: {1}\r\n", DateTime.Now, Message); 

     File.AppendAllText(TraceLogFile, finalMessage); 
    } 
} 

和訪問如下。

Logger.WriteLine("Hello"); 
Logger.WriteLine("Process started"); 

請幫忙解決這個問題。

+0

如果您的用戶創建一個新進程,則每次只有一個用戶可以訪問該日誌文件。告訴我們代碼,也許它可以改變。但是也許更容易集中日誌或使用日誌文件和用戶名 – Marged

回答

0

C#,而不是Java ...

這且不說,文件當他們打開寫通常被鎖定,以防止髒寫。這在大多數操作系統和大多數編程語言中都是一樣的。我寧願去使用數據庫或每個用戶/日期的命名日誌文件,如果你真的需要這種功能。

哈爾德備選:閱讀上互斥

減慢了系統替代方案:關閉文件每次寫入後,重試,直到該文件再次可用。

+0

感謝您指出錯誤的標記。 – coolcfan

+0

新的在這裏,所以不知道我可以嘗試編輯,以及。 :) – roist