2017-10-28 3 views
1

C#でプログラミングされた2つのほぼ同じWeb APIサービスがあり、IIS 6.1の同じWindows 2008 Serverにインストールされています。私はそれらにWeb API呼び出しを行うと、彼らはうまく動作します。私はログの目的のためにlog4netを使用しています。しかし、そのうちの1つが常にログに記録されるわけではありません。なぜこのWeb APIはログにローカルWeb API呼び出しを必要としますか?

<log4net> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
</root> 
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\LOGS\SomeFolder\" /> 
    <appendToFile value="true" /> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    <preserveLogFileNameExtension value="true" /> 
    <rollingStyle value="Date" /> 
    <datePattern value="'WebApi.One.'yyyy-MM-dd'.log'" /> 
    <staticLogFileName value="false" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level [%thread][%date{dd-MM-yy HH:mm:ss,fff}] %logger - %message%newline" /> 
    </layout> 
</appender> 
</log4net> 

構成の唯一の違いは、彼らはまったく同じファイルにログを記録しないように、わずかに異なる名前を持つdatePatternです:彼らの両方があり、同じ正確なlog4netの設定を、持っています。

ログが期待どおりに機能するWeb APIの場合、Web API呼び出しが着信すると、毎日新しいログファイルが作成されます。ログが機能していないWeb APIの場合、新しいログファイルは作成されません。 しかし、インストールされているのと同じサーバー上のブラウザからWeb API呼び出しを行うと、ログが開始されます。その日のロギングが開始された後も、(他のマシンからのWeb API呼び出しであっても)うまくいきます。しかし、翌日には新しいファイルは作成されません。

私は違いが何であるか分かりません。確かに、私はこれらの2つのWeb APIをロギングに関して異なった振る舞いにすることを考えていない何かがあるはずです。覚えておいて、どちらのサービスもうまくいきます。いずれかのサービスでは動作していないログだけです。

提案がありますか?

編集1:
ピーターにより示唆されるように診断を追加した後、私はパスへのアクセスが拒否されたことがわかります。

のlog4net:ERRORは作成できませんでしたAppender [RollingLogFileAppender]タイプの[log4netの.Appender.RollingFileAppender]をクリックします。報告されたエラーが続きます。 System.UnauthorizedAccessException: 'C__LOGS_WebApi.One_'パスへのアクセスが拒否されました。 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanupでSystem.Threading.Mutex.MutexTryCodeHelper.MutexTryCodeでSystem.IO .__ Error.WinIOError(のInt32のerrorCode、文字列maybeFullPath) (ユーザ・データオブジェクト) (TryCodeコード、CleanupCode backoutCode、物体を System.Threading.Mutex..ctor(ブールinitiallyOwned、文字列の名前、ブール& createdNew、mutexSecurity mutexSecurity) でSystem.Threading.Mutex.CreateMutexWithGuaranteedCleanup(ブールinitiallyOwned、文字列の名前、ブール& createdNew、SECURITY_ATTRIBUTES secAttrs) でのuserData) System.Threading.Mutex..ctor(Boolean startsOwned、String name)でlog4net.Appender.RollingFileAppender.ActivateOptions()にある at log4net.Repository.Hierarchy.XmlHierarchyConfigurator.ParseAppender(XmlElement appenderElement) log4net:エラー[RollingLogFileAppender]という名前のAppenderが見つかりません。

私はなぜか分かりません。

編集2:

しかし、まだ進展なし:
私はこれらのStackOverflowの答えで解決策を確認しました。

Thisは非常によく似ていますが、そこに解決策はありませんでした(1つありますが)。

編集3:
フォルダのパーミッション:

Folder permissions

+1

アプリケーションがログファイルを変更する権限を持つように、ログファイルが格納されているフォルダのアクセス許可を変更します。 – Nkosi

+0

@Nkosi Everyoneグループにはすべて許可されています。それをカバーしてはいけませんか? – Halvard

+0

@Nkosiあなたは正しいです。誰もがこのWindows Server上でIIS_IUSRSをカバーしているようです(あるいは何か?)。とにかく、あなたが賞金を欲しがっているのであれば、あなたのコメントを回答として提示し、私はあなたに賞を授与します。 – Halvard

答えて

1

例外メッセージによると、プロセスは、ログファイルの場所に書き込むための十分な権限を持っていません。

IISを使用した経験では、ログファイルが格納されているフォルダのセキュリティ権限を変更すると、アプリケーション/プロセスにログファイルを変更する権限が与えられます。

確認/トラブルシューティングを開始するには、フォルダを完全に制御してファイルを変更できることをテストします。

これがうまくいく場合は、許可の問題であることを確認できます。

私は通常、ログとアーカイブを保存するログフォルダでIIS_IUSRSに次の権限を与えます。

  • 読む
  • は、私がその機能を実行するために、必要に応じて、いくつかの許可等の処理を与えることを試みる可能攻撃ベクトルを制限するには

修正

  • を書きます。パーミッションを追加したり削除したりして、必要に応じて機能することをテストします。

  • +0

    ありがとうございます。これを実行した後に動作します。私はまだ同じサーバーから呼び出されたときにログに記録された理由を理解できませんが(IIS_IUSRSはログに記録しないでください)しかし、それは今私にとっては重要ではありません:) – Halvard

    1

    それはあなたがlog4netのためにデバッグを有効にする必要があり、これをデバッグする、セキュリティ上の問題のようになります。

    <appSettings> 
        <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
    

    <system.diagnostics> 
        <trace autoflush="true"> 
         <listeners> 
          <add 
           name="textWriterTraceListener" 
           type="System.Diagnostics.TextWriterTraceListener" 
           initializeData="C:\tmp\log4net.txt" /> 
         </listeners> 
        </trace> 
    </system.diagnostics> 
    
    構成内に

    があります。

    このようにして、ファイルの作成が失敗する理由を確認することができます。

    log4net faq

    +0

    +1システム診断用。私はそれを考えていたはずです。仕事中は忙しい日ですが、これを追加してエラーの内容を確認します。セキュリティがある場合は、チェックマークを付けます。 – Halvard

    関連する問題