7

「NT AUTHORITY\NETWORK SERVICE」資格情報を使用して Windows サービスを開始すると、NLog で奇妙な問題が発生します。ファイル名にドットが含まれていると、ファイル ターゲットに何も記録されません。

.NET Framework 3.5 SP1 機能が有効になっている WinServer 2008 R2 Standard で Windows サービスを実行しています。NLog.config は次のとおりです。

<targets>
  <target xsi:type="File"
    name="f" 
    fileName="${basedir}/logs/${shortdate}.txt"
    encoding="utf-8"
    concurrentWrites="true"
    keepFileOpen="false"
    layout="${longdate} ${uppercase:${level}} ${message}"/>
</targets>
<rules>
  <logger name="*" minlevel="Trace" writeTo="f" />
</rules>

いくつかのグーグル検索と構成の実験の後、パラメーターにファイル拡張子を含めないことで回避策を思いつきましたfileName。それは問題を解決しますが、まともな解決策のようには見えません。

そして、この問題が奇妙な魔法のように見えるのは、2 番目の Windows サービス (同じ資格情報を持つ同じマシンで実行されている) の構成で、ログ ファイルの拡張子に関する問題を解決できたという事実です。プロジェクト オプションのアセンブリ情報を変更します。

何か案は?

4

2 に答える 2

16

NLog の内部ログ ファイルを有効にした後

<nlog 
  internalLogFile="c:\temp\nlogproblems.txt"  
  throwExceptions="true"  
  xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

なんとか捕まえましたUnathorizedAccessException

2013-04-17 11:06:14.0445 Error Exception in asynchronous handler 
  NLog.NLogRuntimeException: Exception occurred in NLog --->
  System.UnauthorizedAccessException: Access is denied. 
  (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

logsこれにより、フォルダーのアクセス許可を修正する必要があるという結論に至りました。

最後に、奇妙な魔法はもうありません。フォルダーNETWORK SERVICEへの書き込みを許可する必要がありました。logs

于 2013-04-17T05:16:50.920 に答える
0

私の場合は、アプリケーション プールを実行しているユーザーでした。

場合によっては、特定のユーザーが必要なようです。私の場合は IHttpHandler を実行していて、ProcessRequest から呼び出していた他のメソッドがあり、何らかの理由で ProcessRequest 自体から正常に動作しましたが、取得したサブメソッドから

Exception in asynchronous handler 
  NLog.NLogRuntimeException: Exception occurred in NLog --->
  System.UnauthorizedAccessException: Access is denied. 
  (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED))

そして7kunの回答を読んだ後、私はEveryoneにフルコントロールを与え、それが機能し、実際に行方不明のユーザーを見つけるように変更しました

于 2015-02-10T13:32:05.557 に答える