0

場合

現在、log4netロギングを使用してWPFアプリケーションを展開しています。開発中、RollingFileAppenderに問題はありませんでした。ただし、Citrix環境で展開および起動した場合、現在のユーザーには明らかにアプリケーションディレクトリにログファイルを書き込む権限がありません。

質問

  • log4netおよび/またはRollingFileAppender自体にクレデンシャルを提供して、サービスアカウントでログを記録することはどういうわけか可能ですか?
  • 不可能な場合、回避策のアイデアはありますか(すべてのユーザーにディレクトリへのアクセス許可を与えることを除く)?

前もって感謝します!

4

2 に答える 2

3

2年後、私は再び同じ問題に遭遇し、まともな組み込みの解決策を見つけました。カスタムアペンダーはもう必要ありません!

このソリューションは、log4netsecurityContextが呼び出し、各アペンダーに適用できる構成プロパティとして提供されます。以下の例を参照してください。

<log4net>
   <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
       <filter type="log4net.Filter.LevelRangeFilter">
         <levelMin value="INFO" />
      </filter>

      <file type="log4net.Util.PatternString" value="LogFiles\%date{yyyyMMdd}\%property{log4net:HostName}_%env{username}" />
      <datePattern value=".yyyyMMdd'.log'" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="10" />
      <staticLogFileName value="false" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
         <conversionPattern value="%date [%3thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>

      <securityContext type="log4net.Util.WindowsSecurityContext">
         <domainName value="**myDomain**"/>
         <userName value="**myUser**" />
         <password value="**mySecretPassword**" />
      </securityContext>
   </appender>

   <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <filter type="log4net.Filter.LevelRangeFilter">
         <levelMin value="ERROR" />
      </filter>

      <logName value="Application" />
      <applicationName value="**MyAppName**" />
      <Layout type="log4net.Layout.PatternLayout">
         <conversionPattern value="%date [%thread] %-5level %logger{1} - %message%newline" />
      </Layout>

      <securityContext type="log4net.Util.WindowsSecurityContext">
         <domainName value="**myDomain**"/>
         <userName value="**myUser**" />
         <password value="**mySecretPassword**" />
      </securityContext>
   </appender>

   <root>
      <level value="INFO" />
      <appender-ref ref="RollingFileAppender" />
      <appender-ref ref="EventLogAppender" />
   </root>
</log4net>
于 2014-08-07T08:42:40.337 に答える
1

Citrix環境に精通していませんが、RollingFileAppenderから派生したカスタムアペンダーを作成できます。

public class CitrixRollingFileAppender : RollingFileAppender
{
    public string Login { get; set; }
    public string Password { get; set; }    

    protected override void Append(LoggingEvent loggingEvent)
    {
        // use Login and Password here, or authenticate only once when appender created
        base.Append(loggingEvent);
    }
} 

そして構成:

<appender name="citrix" type="YourNamespace.CitrixRollingFileAppender, YourAssembly">
  <file value="citrixlog.txt"/>
  <appendToFile value="true"/>
  <rollingStyle value="Size"/>
  <login value="Foo"/>
  <password value="Bar"/>
  <layout type="log4net.Layout.SimpleLayout"/>
</appender>

更新:アペンダーが構成された後、またはコードが閉じようとしているときに、またはのようなメソッドをオーバーライドして、コードを実行ActivateOptionsできます。OnClose

于 2012-04-10T09:23:30.133 に答える