سؤال

لدي مكتبة فئة يتم نشرها على خادم ISP لتستهلكها خدمة الويب ASP.NET. أرغب في تتبع أي أخطاء وفي هذه الحالة لا يمكن الوصول إلى سجل أحداث Windows. لذلك اعتقدت أنني سأكتب إلى ملف txt باستخدام فئة StreamWriter. المشكلة هي أنه إذا لم أقم بمنح مسار مطلقًا ، بل يحاول اسم ملف فقط الكتابة إلى C: Windows System32 ، وهذا ليس جيدًا بالنسبة لي. كيف يمكنني إخباره باستخدام دليل البيانات أو جذر التطبيق؟ أي أفكار؟

هل كانت مفيدة؟

المحلول

إليكم ما اعتدت استخدامه ، إنه أمر عالي بعض الشيء ولكنه ينجز المهمة:

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 LogSeverity هو مجرد تعداد قمت بتكوينه ...

نصائح أخرى

يستخدم Server.MapPath للحصول على مسار بالنسبة لتطبيق الويب.

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

على الرغم من أن بعض الملصقات السابقة قد اقترحت استخدام التأمل للحصول على التجميع التنفيذي ، لست متأكدًا مما إذا كان هذا سيؤدي إلى توصيل تطبيق الويب أو عملية W3WP أم لا. إذا كان هذا هو الأخير ، فلا يزال بإمكانك محاولة الكتابة إلى مجلد System32.

في منتج الويب الخاص بي ، في الويب.

<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