Windows NTサービス用のLog4Netでロギングソリューションを実装しています。構成ファイルのスイッチを入れて、ファイルシステムに情報を記録することができます。これまで私は、ローリングファイルアペンダーを持ち、log4netに設定ファイルを "見る"ようにすることでこれを達成できました。Log4Netにファイルシステムへのアクセス権がないとどうなるのですか?
私が気づいたことは、すべてのロギングがオフになっていてログに記録するつもりはないとしても、サービスが起動するとすぐにLog4Netが空のログファイルを作成することです。私はこの記事以外に、このトピックに関する多くの情報を見つけることができません
:
How to disable creation of empty log file on app start?
私の関心は、誰かがそれではないでしょう権限の非常に低レベルのセットでサービスを設定することができることですファイルシステム上にログファイルを作成するためのアクセス権があります。私はログに記録するつもりがない場合でもログ記録の文を書き込むたびに例外がスローされるというパフォーマンスの低下を招きたくありません。
ロギングレベルがログオンする前に有効になっているかどうかを確認するために各ロギングステートメントをラップしましたが、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>
これが2011年に当てはまるかどうかはわかりませんが、少なくともLog4Netの最新バージョンでは、実際に何かを記録しようとする前に、指定されたログレベルが有効かどうかを内部的にチェックします。 IsDebugEnabledのような関数は、ロガーに送信されるデータを生成するCPU /リソース集約型の場合にのみ便利です。関連するDebugFormatのような関数は、簡潔であるというデュアルな目的を持っていますが、ログレベルが有効になっていない限り、実際のstring.Formatを実行する必要はありません。 – ShawnFumo