سؤال

وأواجه بعض المتاعب الحصول على log4net للعمل من ASP.NET 3.5. وهذه هي المرة الأولى التي حاولت استخدام log4net، أشعر وكأنني أنا في عداد المفقودين قطعة من اللغز.

ومشروعي يحيل الى الجمعية log4net، وبقدر ما استطيع ان اقول، فمن يتم نشرها بنجاح في خدمة بلدي.

وبلدي الملف web.config يحتوي على ما يلي:

  <configSections>
    <section name="log4net"
      type="log4net.Config.Log4NetConfigurationSectionHandler
      , log4net"
      requirePermission="false"/>
  </configSections>

  <log4net>
    <appender name="InfoAppender" type="log4net.Appender.FileAppender">
      <file value="..\..\logs\\InfoLog.html" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
          value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
    <logger name="_Default">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
  </log4net>

وأنا باستخدام التعليمات البرمجية التالية لاختبار مسجل:

using log4net;
using log4net.Config;

public partial class _Default : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("_Default");

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Info("Hello logging world!");
    }
}

في بلدي Global.asax، أنا أفعل ما يلي:

void Application_Start(object sender, EventArgs e) 
{
    log4net.Config.XmlConfigurator.Configure();
}

وعند هذه النقطة، لا أستطيع التفكير في ماذا أنا يمكن أن تقوم به خطأ. الدليل أحاول لتخزين سجل في غير قابل للكتابة، وحتى لو أحاول دلائل مختلفة أحصل على النتيجة نفسها: أي ملف، لا السجلات

وأي اقتراحات؟ : -)


تحرير: لقد حاولت العديد من الأشكال المختلفة لمسار واسم ملف السجل، التي تشمل بعض من ".. \ .. \ InfoLog.html"، "InfoLog.html"، "السجلات \ InfoLog.html "وغيرها، فقط في حالة شخص يتساءل إذا كان هذا هو المشكلة.


تحرير: لقد أضاف العقدة مسجل الجذر مرة أخرى إلى القسم log4net، I ommitted أنه في حادث عند نسخ من العينات. العقدة مسجل جذر يشبه هذا:

<root>
  <level value="INFO" />
  <appender-ref ref="InfoAppender" />
</root>

وحتى مع ذلك، ومع ذلك، وأنا لا تزال تواجه أي حظ.

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

المحلول

وومسجل الجذر إلزامي على ما أعتقد. وأظن التكوين فشل بسبب عدم وجود الجذر.

وهناك مشكلة أخرى محتملة هي أن تكوين لا يتم أشار إلى الملف web.config.

وحاول تكوين (Server.MapPath ( "~ / الملف web.config")) بدلا من ذلك.

نصائح أخرى

وهذا يبدو وتشبه إلى حد كبير مشكلة أذونات الملف بالنسبة لي. إذا قمت بتحديد اسم الملف دون أي مسار، سوف log4net الكتابة إلى الدليل الجذر لتطبيق ويب. جرب ذلك. منع أي نجاح هناك، وأنا أنصح تمكين التصحيح log4net الداخلي عن طريق وضع ما يلي في الملف web.config الخاص بك:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

وبعد ذلك، نشر التطبيق جمعت في وضع التصحيح وتشغيل في استوديو البصرية المصحح البعيد لنرى أي الأخطاء التي القيت.

أمضى

ورابعا فقط 3 ساعات في محاولة لإصلاح هذه المشكلة النهاية كان تنسيق الملف web.config.

وكان لي ذلك، وأنها لا تعمل:

<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
      <section name="log4net"
        type="log4net.Config.Log4NetConfigurationSectionHandler
      , log4net"
        requirePermission="false"/>

وتغييرها إلى هذه ثابتة:

 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" requirePermission="false"/>

ومزعج !!

وفقط لمزيد من المعلومات: يجب تهيئة مسار الملف كما يلي:

<file value="..\\..\\logs\\InfoLog.html" />

وتكوين بسيط البرنامج التعليمي من CodeProject

وأنا لم يكن لديك Global.asx لتشغيل في صافي 3.5

وهذا هو قانون بلدي ... أنا تكوين log4net في log4net.config ملف منفصل

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

//My Web Services class name
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Service1");

وكان لي نفس (محبطة) المشكلة. انتقلت الجذر إلى الجزء العلوي من قسم log4net التكوين وكل شيء يعمل. أيضا، كان لي أيضا جذر وعنصر مسجل، وهذا أدى إلى خطين كل مرة كنت إجراء مكالمة إلى المسجل. ط إزالة عنصر مسجل ومن السهل الحفاظ على الجذور ولها عمل عظيم.

وماذا عن خلق مسجل مع نوع الصفحة، ومثل هذا:

private static readonly ILog log = LogManager.GetLogger(typeof(_Default));

وهذا هو ما قلته في Global.ASX. انها حصلت على جميع العاملين في asp.net 3.5

<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
         log4net.Config.XmlConfigurator.Configure(); 
    }

    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown
        log4net.LogManager.Shutdown();
    }

    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs
    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.
    }
</script>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top