C# asp.net正在尝试为我的web应用创建日志文件

C# asp.net正在尝试为我的web应用创建日志文件,c#,permissions,C#,Permissions,我正在尝试将log.txt文件放在我的应用程序的根目录下,并希望写入它。但这似乎不起作用。谢谢你的帮助 错误消息(我不认为我正在写入正确的文件,顺便说一句,这是本地主机。如果它是本地的或在网络主机上,我希望它可以工作): 访问路径“C:\Program Files(x86)\Common Files\Microsoft” “共享\DevServer\10.0\log.txt”被拒绝 描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来

我正在尝试将log.txt文件放在我的应用程序的根目录下,并希望写入它。但这似乎不起作用。谢谢你的帮助

错误消息(我不认为我正在写入正确的文件,顺便说一句,这是本地主机。如果它是本地的或在网络主机上,我希望它可以工作):

访问路径“C:\Program Files(x86)\Common Files\Microsoft” “共享\DevServer\10.0\log.txt”被拒绝

描述:在执行过程中发生未处理的异常 当前的web请求。请查看堆栈跟踪以了解更多信息 有关错误的信息及其在代码中的来源

这是我的代码:

 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();
        }

您应该使用
Environment.CurrentDirectory
获取正在运行的文件夹


您的代码现在尝试写入web服务器运行时文件夹(
C:\Program Files(x86)\Common Files\Microsoft Shared\DevServer\10.0
)。

尝试给出log.txt文件的完整路径,您可以使用web.config获取目录路径。

我认为您需要:

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("~"));

   }

您必须找到运行IIS站点的用户(使用IIS管理器在站点的应用程序池中查找该用户)

您必须授予此用户在试图创建log.txt文件的文件夹中读/写的权限

错误完全清楚“访问被拒绝”。

您也可以使用,实现起来非常简单

首先在项目中下载并添加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>
创建一个名为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;
        }
    }

确保应用程序池用户对要写入的目录具有写入权限。如何在类上使用映射路径?这不是asp服务器classTry
HttpContext.Current.server.MapPath()
方法。无更改方法符号。是的,但如果我上载到主机,我必须更改它。将目录路径保留在web.config中允许您在web服务器上发布后更改它,因此这应该会对您有所帮助。在本地/测试环境中可以有一个路径,在生产服务器上可以有不同的路径。
 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;
        }
    }