Вопрос

У меня есть классная библиотека, которая развернута на сервере ISP, который будет использоваться веб-службой ASP.NET. Я хотел бы отслеживать любые ошибки, и в этом случае журнал событий Windows недоступен для меня. Поэтому я думал, что я напишу в файл TXT с помощью класса StreamWriter. Проблема в том, что если я не даю абсолютный путь и просто имя файла, он пытается написать на C: Windows System32, и это не хорошо для меня. Как я могу сказать ему использовать, возможно, каталог данных или root приложение? есть идеи?

Это было полезно?

Решение

Вот что я использовал для использования, это немного неуклюжее, но это сделает работу:

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

У меня был этот класс в своем собственном проекте, отдельно от самого сайта, и я использовал его во всех других проектах, не являющихся веб-сайтом ...

Редактировать: btw logeSeverity - это просто enum, который я составил ...

Другие советы

Использовать Server.MapPath Чтобы получить путь относительно веб-приложения.

using (FileStream fs = new FileStream(Server.MapPath("~/logs/logfile.txt"),
                                      FileMode.Append)) {
  //do logging here.
}

Хотя некоторые из предыдущих плакатов предложили использовать Repliction для получения исполняемой сборки, я не уверен, что это будет чистоте вам веб-приложение или процесс W3WP. Если это последний, вы все еще собираетесь в конечном итоге, пытаясь написать в папку System32.

В моем веб-продукте в Web.config я указываю блок приложений, как это:

<configuration>
    <appSettings>
      <add key="MyLogPath" value="LogPath" />
    </appSettings>
</configuration>

который вы можете использовать из кода, как

ConfigurationManager.AppSettings["MyLogPath"]

Тогда вы можете настроить установщик настроить его туда, куда вы хотите. Вы, вероятно, не хотите файлы журнала в вашем каталоге приложений.

Попробуйте проверить:

Application.StartupPath;

Вот а Ссылка на документы

Получает путь для исполняемого файла, который начал приложение, не включая исполняемое имя.

string path = Application.StartupPath;

Примечание. Вам все равно нужно добавить имя файла.

Вы можете узнать путь своего исполняемого исполнения, делая это:

string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top