3

複数の Web サービスを備えた Web アプリケーションがあります。この Web アプリケーションには、ビジネス レイヤーと永続レイヤーがあります。Web サービスごとに個別のログ アペンダー (ログ ファイル) を使用することは可能ですか?

これは Web ページにも当てはまります。基本的に、ログをクラスまたはレイヤー/名前空間に基づいてではなく、Web サービスまたは Web ページであるエントリ ポイントから分離したいと考えています。

4

4 に答える 4

1

各 Web サービスで取得するロガーを定義できます。

namespace log4net
{
    public class LogManager
    {
        public static ILog GetLogger(string name);
        public static ILog GetLogger(Type type);
    }
}

次に、アプリで各ロガーを適切に呼び出すことができます。

public class MyApp 
{
    // Define a static logger variable so that it references the
    // Logger instance named "MyApp".
private static readonly ILog log = LogManager.GetLogger(typeof(MyApp));

static void Main(string[] args) 
{
    // Set up a simple configuration that logs on the console.
    BasicConfigurator.Configure();

    log.Info("Entering application.");
    Bar bar = new Bar();
    bar.DoIt();
    log.Info("Exiting application.");
}
}

を正しい Web サービスに変更してくださいtypeof

ソースと詳細情報はこちら.

于 2008-12-12T01:23:06.197 に答える
1

各ページでネストされた診断コンテキスト(NDC) を使用し、NDC に基づいてログ出力をフィルター処理することをお勧めします。

NDC 情報は、現在のスレッド コンテキストからログに記録されたイベントに含まれます。これには、ページ コード、サービス コード、リポジトリ コードなどが含まれます。

NDC コンテンツのフィルタリングを使用すると、ログ出力をさまざまなサービスから分離できます。

于 2009-07-19T21:12:00.340 に答える
0

これは、PropertyFilter を使用して行うことができます。構成ファイルで次のアペンダーを定義しました。

<appender name="UiFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Log1.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
  <filter type="log4net.Filter.PropertyFilter">
    <Key value="channel"/>
    <StringToMatch value="ui" />
    <AcceptOnMatch value="true" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="WsFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="Log1.log" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
  <filter type="log4net.Filter.PropertyFilter">
    <Key value="channel"/>
    <StringToMatch value="ws" />
    <AcceptOnMatch value="true" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>

上記のアペンダーの重要な部分はタグです。ユーザーが UI を使用している場合、次のコードのように「channel」プロパティを「ui」に設定します。

log4net.GlobalContext.Properties["channel"] = "ui";

ユーザーがWebサービスを使用するときは、次のコードを使用します。

log4net.GlobalContext.Properties["channel"] = "ws";

リクエストが開始されたときに、エントリの最上位レベルで「チャネル」プロパティを設定する必要があります。

于 2009-07-28T18:12:30.283 に答える