【发布时间】:2019-03-04 01:10:09
【问题描述】:
我有以下功能可以进行文本记录,但我一直在错误之下。它不是每次都来,而只是某个时候,而且在 IIS 级别也是如此。发生此错误后,IIS Apppool 将停止。
发生未处理的异常,进程终止。
应用程序 ID:/LM/W3SVC/2/ROOT/OrderHelpDesk
进程 ID:81044
异常:System.UnauthorizedAccessException
消息:对路径“\Ser-file\ErrorLog\2018-09\09_27_2018.txt”的访问被拒绝。
StackTrace:在 OrderHelpDesk.DAL.LogMessage(字符串消息) 在 OrderHelpDesk.ViewPendingOrderDetails.AutoGenMailToCSRProcessed(实体 objEntity) 在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态,布尔值 preserveSyncCtx) 在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext,ContextCallback 回调,对象状态) 在 System.Threading.ThreadHelper.ThreadStart()
public void LogMessage(string Message)
{
Entity objEntity = new Entity();
StreamWriter sw = null;
try
{
objEntity.LogMessage = string.Format("\r\n{0:MM/dd/yyyy hh:mm:ss tt} : {1}", DateTime.Now, Message);
objEntity.LogFilePath = ConfigurationManager.AppSettings.Get("ErrorLogPath");
objEntity.LogFolderName = string.Format("{0:yyyy-MM}", DateTime.Now);
objEntity.LogFilePath = objEntity.LogFilePath + objEntity.LogFolderName;
if (!Directory.Exists(objEntity.LogFilePath))
{
Directory.CreateDirectory(objEntity.LogFilePath);
}
sw = File.AppendText(objEntity.LogFilePath + "\\" + string.Format("{0:MM_dd_yyyy}", DateTime.Now) + ".txt");
sw.WriteLine(objEntity.LogMessage);
}
catch (Exception Ex)
{
throw Ex;
}
finally
{
sw.Close();
}
}
【问题讨论】:
-
您看到
'\Ser-file\ErrorLog\2018-09\09_27_2018.txt'路径是否正确?此外,iis_user 是否有权读取/写入该文件夹? -
是的,那条路径是正确的。 iis_user 对该文件夹有读写权限。问题是,它不是每次都抛出这个错误,而是偶尔,我不知道在什么情况下会发生这种情况。
-
根据您的标题,我认为您正在获得空白路径。
-
如果可以,最好使用 Serilog 等日志库。这个问题已经解决了,不用重新实现。
标签: c#