记录器对于多个用户一次写入文件。
我在我的应用程序中使用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 :(得分:0)
C#,而不是Java ......
除此之外,文件通常在打开以进行写入时被锁定,以防止脏写。在大多数操作系统和大多数编程语言中都是如此。如果您确实需要这种功能,我宁愿每个用户/日期使用数据库或命名日志文件。
更难选择:阅读Mutexes
减慢系统备选:每次关闭文件,写入后重试,直到文件再次可用。