2011-01-11 38 views
0

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> 
+0

これが2011年に当てはまるかどうかはわかりませんが、少なくともLog4Netの最新バージョンでは、実際に何かを記録しようとする前に、指定されたログレベルが有効かどうかを内部的にチェックします。 IsDebugEnabledのような関数は、ロガーに送信されるデータを生成するCPU /リソース集約型の場合にのみ便利です。関連するDebugFormatのような関数は、簡潔であるというデュアルな目的を持っていますが、ログレベルが有効になっていない限り、実際のstring.Formatを実行する必要はありません。 – ShawnFumo

答えて

1

「私の関心は、誰かが非常に低いレベルを設定してサービスを設定することができることですファイルシステム上にログファイルを作成するためのアクセス権を持たないパーミッションも必要です。 " - サービス起動時に必要な最小限のパーミッションを検出し、存在しない場合は例外をスローします。

これはロギングの問題とは思われません。あなたのサービスが必要な権限を持っているかどうかの問題です。

+0

それは良い提案です。私はこの記事を読んで、Windows 7とWindows Server 2008の適切な場所に書いていることを確認したいと思っています。http://stackoverflow.com/questions/468989/how-to-specifiy-common-application- data-for-log4net ...なぜサービスが開始できないのかをユーザーに通知するための良いパターンがありますか?ほとんどの場合、ProgramDataの場所に書き込めない場合、サービスが開始されない理由をユーザーに伝えるにはどうすればよいですか? – Loathian

+0

ミッチ、私は先に行って、あなたの答えを受け入れました。それは数日であり、他の投稿はありませんでした。フィードバックをお寄せいただきありがとうございます。 – Loathian

関連する問題