我有一个部署在 ISP 服务器上的类库,供 ASP.NET Web 服务使用。我想跟踪任何错误,在这种情况下,我无法访问 Windows 事件日志。所以我想我会使用 StreamWriter 类写入一个 txt 文件。问题是如果我没有给出绝对路径而只是一个文件名,它会尝试写入 C:\Windows\System32,这对我没有好处。我如何告诉它使用数据目录或应用程序根目录?有什么想法吗?
问问题
2763 次
5 回答
3
用于Server.MapPath
获取相对于 Web 应用程序的路径。
using (FileStream fs = new FileStream(Server.MapPath("~/logs/logfile.txt"),
FileMode.Append)) {
//do logging here.
}
虽然之前的一些海报建议使用反射来获取执行程序集,但我不确定这是否会为您提供 Web 应用程序或 w3wp 进程。如果是后者,您最终仍会尝试写入 System32 文件夹。
于 2010-09-29T19:34:33.620 回答
2
这是我以前使用的,它有点笨拙,但它可以完成工作:
using System;
using System.Collections.Generic;
using System.Web.UI;
public static class Logger
{
private static readonly Page Pge = new Page();
private static readonly string Path = Pge.Server.MapPath("~/yourLogPath/Log.txt");
private const string LineBreaker = "\r\n\r======================================================================================= \r\n\r";
public static void LogError(string myMessage, Exception e)
{
const LogSeverity severity = LogSeverity.Error;
string messageToWrite = string.Format("{0} {1}: {2} \r\n\r {3}\r\n\r {4}{5}", DateTime.Now, severity, myMessage, e.Message, e.StackTrace, LineBreaker);
System.IO.File.AppendAllText(Path, messageToWrite);
}
}
我在自己的项目中有这个类,与网站本身分开,我在所有其他非网站项目中都使用了它......
编辑:顺便说一句,LogSeverity 只是我编造的一个枚举......
于 2010-09-29T20:24:06.493 回答
1
在我的网络产品中,在 web.config 中,我指定了一个 appSettings 块,如下所示:
<configuration>
<appSettings>
<add key="MyLogPath" value="LogPath" />
</appSettings>
</configuration>
您可以从代码中使用它
ConfigurationManager.AppSettings["MyLogPath"]
然后您可以让安装程序将其配置到您想要的任何位置。您可能不希望应用程序目录中的日志文件。
于 2010-09-29T19:27:20.130 回答
0
您可以通过执行以下操作找出可执行文件的路径:
string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
于 2010-09-29T19:23:46.733 回答
0
尝试检查:
Application.StartupPath;
这是文档的链接
获取启动应用程序的可执行文件的路径,不包括可执行文件名。
string path = Application.StartupPath;
注意:您仍然需要添加文件名。
于 2010-09-29T19:22:12.747 回答