asp.net пытается создать файл журнала для моего веб-приложения - PullRequest
1 голос
/ 29 марта 2012

Я пытаюсь поместить файл log.txt в корень моего приложения и хотел бы написать в него. Но похоже, что это не работает. Спасибо за любую помощь.

Сообщение об ошибке (я не думаю, что пишу в нужный файл, кстати, это локальный хост. Мне бы хотелось, чтобы это работало, если оно локальное или на веб-хосте):

Доступ к пути 'C: \ Program Files (x86) \ Common Files \ Microsoft Shared \ 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 ]

2 голосов
/ 29 марта 2012

Я думаю, вам нужно:

public static void LogErrorMessage(Exception e, string Directory)
{
    using (StreamWriter w = File.AppendText(Directory + "/log.txt"))
    {
         Log(e.ToString(),w);
         w.Close();
    }

}

ASPX Class

public void Page_Load()
   {
      Logger.LogErrorMessage(ex, Server.MapPath("~"));

   }
1 голос
/ 29 марта 2012

Вы должны использовать Environment.CurrentDirectory для получения вашей рабочей папки.

Ваш код теперь пытается записать в папку времени выполнения веб-сервера (C:\Program Files (x86)\Common Files\Microsoft Shared\DevServer\10.0).

0 голосов
/ 29 марта 2012

Вы также можете использовать 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:

 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;
        }
    }
0 голосов
/ 29 марта 2012

Вы должны определить, какой пользователь использует ваш сайт IIS (найдите пользователя в пуле приложений вашего сайта с помощью IIS Manager).

Вы должны дать этому пользователю права на чтение / запись в папке, где выпытаемся создать файл log.txt.

Ошибка абсолютно ясна: "доступ запрещен".

0 голосов
/ 29 марта 2012

Попробуйте указать полный путь к файлу log.txt, вы можете использовать web.config для получения пути к каталогу.

...