Frage

ich eine Klassenbibliothek haben, die auf einem ISP-Server bereitgestellt wird von einem ASP.NET-Webdienst verbraucht werden. Ich mag den Überblick über die Fehler halten und in diesem Fall wird das Windows-Ereignisprotokoll ist mir nicht zugänglich. Also dachte ich, ich in eine TXT-Datei der Streamwriter-Klasse schreiben würde. Das Problem ist, wenn ich nicht einen absoluten Pfad geben und nur sie Dateinamen versucht, C zu schreiben: \ Windows \ System32, und das ist nicht gut für mich. Wie kann ich ihm sagen, vielleicht das Datenverzeichnis oder den Anwendungsstamm zu bedienen? Irgendwelche Gedanken?

War es hilfreich?

Lösung

Hier ist, was ich früher, es ist ein wenig klobig, aber es wird die Arbeit getan:

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

hatte ich diese Klasse in einem eigenen Projekt, getrennt von der Website selbst, und ich benutzen es in allen meinen andere nicht Website-Projekten ...

Edit: Btw LogSeverity ist nur ein Aufzählungs ich aus ...

Andere Tipps

Verwenden Server.MapPath einen Pfad in Bezug auf die Web-Anwendung zu erhalten.

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

Während einige der vorherigen Plakate vorgeschlagen Reflexion mit der Vollstreckungsanordnung zu bekommen, ich bin mir nicht sicher, ob oder nicht, dass Sie die Web-Anwendung oder den w3wp Prozess wird net. Falls das letzte ist, sind Sie immer noch versuchen, zu Ende gehen bis zu dem Ordner System32 zu schreiben.

In meinem Web-Produkt, in der web.config angeben ich einen appSettings Block wie folgt aus:

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

, die Sie aus dem Code wie

verwenden können,
ConfigurationManager.AppSettings["MyLogPath"]

, dann können Sie das Installationsprogramm konfigurieren müssen es, wo immer Sie wollen. Sie wollen wahrscheinlich nicht die Protokolldateien in Ihrem Anwendungsverzeichnis.

Versuchen heraus überprüfen:

Application.StartupPath;

Hier ist ein Link auf die Dokumentation

  

Ruft den Pfad für die ausführbare Datei   dass die Anwendung gestartet hat, nicht   einschließlich der Namen der ausführbaren Datei.

string path = Application.StartupPath;

. Hinweis: Sie müssen noch einen Dateinamen hinzufügen

Sie können den Pfad der ausführbaren Datei herausfinden, indem dies zu tun:

string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top