C # Библиотека класса: Streamwriter Написание в папке System32
-
26-09-2019 - |
Вопрос
У меня есть классная библиотека, которая развернута на сервере 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);