我正在尝试将log.txt文件放在我的应用程序的根目录上,并希望写入它。但似乎这不起作用。谢谢你的帮助。
错误消息(我不认为我正在写入正确的文件,顺便说一下,这是本地主机。我希望这可以在本地或在webhost上工作):
访问路径'C:\ Program Files(x86)\ Common Files \ Microsoft 共享\ DevServer \ 10.0 \ log.txt'被拒绝。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
这是我的代码:
public static void LogErrorMessage(Exception e)
{
using (StreamWriter w = File.AppendText("log.txt"))
{
Log(e.ToString(),w);
w.Close();
}
}
private static void Log(String logMessage, TextWriter w)
{
w.Write("\r\nLog Entry : ");
w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(),
DateTime.Now.ToLongDateString());
w.WriteLine(" :");
w.WriteLine(" :{0}", logMessage);
w.WriteLine("-------------------------------");
// Update the underlying file.
w.Flush();
}
答案 0 :(得分:2)
我认为你需要:
public static void LogErrorMessage(Exception e, string Directory)
{
using (StreamWriter w = File.AppendText(Directory + "/log.txt"))
{
Log(e.ToString(),w);
w.Close();
}
}
ASPX类
public void Page_Load()
{
Logger.LogErrorMessage(ex, Server.MapPath("~"));
}
答案 1 :(得分:1)
您应该使用Environment.CurrentDirectory
来获取正在运行的文件夹。
您的代码现在尝试写入Web服务器运行时文件夹(C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0
)。
答案 2 :(得分:0)
尝试提供log.txt文件的完整路径,您可以使用web.config来获取目录路径。
答案 3 :(得分:0)
您必须找到运行IIS站点的用户(使用IIS管理器在您站点的应用程序池中查找用户)。
您必须授予此用户读取/写入您尝试创建log.txt文件的文件夹的权限。
错误绝对清楚“访问被拒绝”。
答案 4 :(得分:0)
您也可以使用NLog,实现它非常简单。
首先在项目中下载并添加参考NLog。
并创建NLog.config:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<targets>
<target name="file" xsi:type="File" fileName="${basedir}/Logs/site.log"
layout="${date}: ${message}" />
<target name="eventlog" xsi:type="EventLog" source="Dealing Errors Nlog" log="Application"
layout="${date}: ${message} ${stacktrace}" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="file" />
<logger name="*" minlevel="Error" writeTo="file" />
<logger name="*" minlevel="Error" writeTo="eventlog" />
<logger name="*" minlevel="Info" writeTo="eventlog" />
</rules>
</nlog>
在Global.asax
中private NLogLogger GetLog()
{ return new NLogLogger(); }
创建一个名为Log.cs的类:
public static class Log
{
public static ILogger GetLogger()//return the interface
{
return new NLogLogger();
}
}
创建另一个名为NLogger的类:
public class NLogLogger : ILogger
{
private Logger _logger; //NLog
public NLogLogger()
{
_logger = LogManager.GetCurrentClassLogger();
}
public void Info(string message)
{
_logger.Info(message);
}
public void Warn(string message)
{
_logger.Warn(message);
}
public void Debug(string message)
{
_logger.Debug(message);
}
public void Error(string message)
{
_logger.Error(message);
}
public void Error(Exception x)
{
Error(LogUtility.DealingException(x));
}
public void Fatal(string message)
{
_logger.Fatal(message);
}
public void Fatal(Exception x)
{
Fatal(LogUtility.DealingException(x));
}
}
接口ILogger上的和cread:
public interface ILogger
{
void Info(string message);
void Warn(string message);
void Debug(string message);
void Error(string message);
void Error(Exception x);
void Fatal(string message);
void Fatal(Exception x);
}
最后是一个LogUtility类:
public class LogUtility
{
public static string DealingException(Exception x)
{
Exception logException = x;
if (x != null)
{
logException = x;
}
string strErrorMsg = Environment.NewLine + "URL ERROR:\t" + System.Web.HttpContext.Current.Request.Path;
strErrorMsg += Environment.NewLine + "URL:\t" + System.Web.HttpContext.Current.Request.RawUrl;
strErrorMsg += Environment.NewLine + "Message:\t" + (logException.Message != null ? logException.Message : "Not Found");
strErrorMsg += Environment.NewLine + "Source:\t" + (logException.Source != null ? logException.Source : "Not Found");
strErrorMsg += Environment.NewLine + "Stack Trace:\t" + (logException.StackTrace != null ? logException.StackTrace : "Not found");
strErrorMsg += Environment.NewLine + "Destination URL:\t" + (logException.TargetSite.ToString() != null ? logException.TargetSite.ToString() : "Not found");
strErrorMsg += Environment.NewLine;
strErrorMsg += Environment.NewLine;
return strErrorMsg;
}
}