asp.net试图为我的网络应用程序创建一个日志文件

时间:2012-03-29 12:58:54

标签: c# permissions

我正在尝试将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();
        }

5 个答案:

答案 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;
        }
    }