0

WindowsNTサービス用のLog4Netを使用してロギングソリューションを実装しています。構成ファイルのスイッチを切り替えて、ファイルシステムへの情報のログ記録を開始できます。これまでのところ、ローリングファイルアペンダーを使用し、log4netで構成ファイルを「監視」することでこれを実現できました。

私が気付いたのは、すべてのログがオフになっていて、ログを記録するつもりがない場合でも、サービスが開始されるとすぐにLog4Netが空のログファイルを作成することです。

この投稿以外に、このトピックに関する多くの情報を見つけることができません。

アプリの起動時に空のログファイルの作成を無効にするにはどうすればよいですか?

私の懸念は、誰かがファイルシステム上にログファイルを作成するためのアクセス権さえも持たない非常に低レベルのアクセス許可のセットでサービスをセットアップする可能性があることです。ログに記録するつもりがなかったとしても、ログステートメントにヒットするたびに例外がスローされるというパフォーマンスの低下を招きたくありません。

ログに記録する前に、ログレベルが有効になっているかどうかを確認するために、各ログステートメントをチェックでラップしましたが、log4netの内部動作で、ファイルが構成されている場合に例外がスローされるかどうかはまだわかりません。アペンダーで作成されませんでした。

if (logger.IsDebugEnabled)
{
    logger.DebugFormat(format, traceMessage);    
}

log4netが最初にログファイルを作成できない場合にどうなるか知っている人はいますか?

これが私の設定に関するちょっとした情報です。オンにするとロギングは正常に機能します。権限の問題が心配です。

構成の変更を監視するためのロギングクラスの属性:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Logging.config", Watch = true)]

アペンダー:

  <appender name="Test" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value=".\\AppLogs\\_test.%appdomain.log" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="ALL" />
      <levelMax value="FATAL" />
      <acceptOnMatch value="false"/>
    </filter>
    <filter type="log4net.Filter.LoggerMatchFilter">
      <loggerToMatch value="Test" />
    </filter>
    <appendToFile value="true" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="6MB" />
    <rollingStyle value="Size" />
    <staticLogFileName value="true" />
    <filter type="log4net.Filter.DenyAllFilter" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level - %message%newline" />
    </layout>
  </appender>
4

1 に答える 1

1

「私の懸念は、誰かが非常に低いレベルの権限セットでサービスをセットアップして、ファイル システム上にログ ファイルを作成するためのアクセス権さえ持たない可能性があることです。」 - サービスの起動時に、必要な最小限の権限セットを検出するそうでない場合は、例外を提示してスロー (または処理) します。

これはロギング自体の問題ではないと思います。サービスに必要なアクセス許可があるかどうかの問題です。

于 2011-01-11T02:35:49.433 に答える