13

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」、「logs\InfoLog.html」などが含まれます、誰かがそれが問題かどうか疑問に思っている場合に備えて。


編集: ルート ロガー ノードを log4net セクションに追加し直しました。サンプルからコピーするときに誤ってそれを省略しました。ルート ロガー ノードは次のようになります。

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

それでも、まだ運がありません。

4

9 に答える 9

13

ルートロガーは必須だと思います。ルートが存在しないため、構成が失敗していると思われます。

もう 1 つの潜在的な問題は、Configure が Web.config を指していないことです。

代わりに Configure(Server.MapPath("~/web.config")) を試してください。

于 2008-10-22T03:46:27.070 に答える
5

私にとっては、ファイルのアクセス許可の問題に非常によく似ています。パスを指定せずにファイル名を指定すると、log4net は Web アプリケーションのルート ディレクトリに書き込みます。それを試してみてください。成功しない場合は、web.config に次のコードを追加して、log4net の内部デバッグを有効にすることをお勧めします。

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

次に、デバッグ モードでコンパイルされたアプリをデプロイし、Visual Studio リモート デバッガーを実行して、スローされたエラーを確認します。

于 2008-11-14T03:44:42.820 に答える
4

Iv は、この問題を修正するために 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"/>

迷惑!!

于 2009-04-05T20:11:58.087 に答える
1

参考までに: ファイル パスは次のようにフォーマットする必要があります。

<file value="..\\..\\logs\\InfoLog.html" />
于 2008-12-19T09:49:42.803 に答える
1

.net 3.5 で実行する Global.asx がありません

これは私のコードです...別のファイルlog4net.configでlog4netを構成します

// 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");
于 2010-10-05T03:08:26.293 に答える
1

CodeProjectの簡単な構成チュートリアル

于 2009-04-20T13:31:25.947 に答える
0

私は同じ(イライラする)問題を抱えていました。ルートをlog4net構成セクションの一番上に移動したところ、すべて機能しました。また、私もルートとロガー要素を持っていました。これにより、ロガーを呼び出すたびに2行になりました。ロガー要素を削除し、ルートとその機能を維持するだけです。

于 2009-01-13T22:36:54.823 に答える
-2

これは私が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>
于 2008-11-14T03:30:02.927 に答える
-2

次のように、ページのタイプでロガーを作成するのはどうですか:

private static readonly ILog log = LogManager.GetLogger(typeof(_Default));
于 2008-12-19T10:03:42.540 に答える