多个用户的记录器

时间:2015-10-19 06:30:01

标签: c# logging

记录器对于多个用户一次写入文件。

我在我的应用程序中使用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");

请帮助解决问题。

1 个答案:

答案 0 :(得分:0)

C#,而不是Java ......

除此之外,文件通常在打开以进行写入时被锁定,以防止脏写。在大多数操作系统和大多数编程语言中都是如此。如果您确实需要这种功能,我宁愿每个用户/日期使用数据库或命名日志文件。

更难选择:阅读Mutexes

减慢系统备选:每次关闭文件,写入后重试,直到文件再次可用。