2017-02-18 28 views
0

私はWindowsサービスでlog4netを作成することに非常に不満を持っています。 私はGoogleで検索しようとしましたが、私の問題を解決する解決策はありません。ここで Log4netはWindowsサービスでは動作しません

は私のApp.configファイルです:

メイン機能でのProgram.csで
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 

    <configSections> 
    <section name="log4net" 
      type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821" />  
    </configSections> 

    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" /> 
    </startup> 

    <appSettings> 
    <add key="ApplicationSettings" value="Configurations/ApplicationSettings.json" /> 
    <add key="ClientSettingsProvider.ServiceUri" value="" /> 
    </appSettings> 

    <!-- log4net rolling file configuration --> 
    <log4net debug="true"> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="log.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="100KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingLogFileAppender" /> 
    </root> 
    </log4net> 

    <system.web> 
    <membership defaultProvider="ClientAuthenticationMembershipProvider"> 
     <providers> 
     <add name="ClientAuthenticationMembershipProvider" 
      type="System.Web.ClientServices.Providers.ClientFormsAuthenticationMembershipProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" /> 
     </providers> 
    </membership> 
    <roleManager defaultProvider="ClientRoleProvider" enabled="true"> 
     <providers> 
     <add name="ClientRoleProvider" 
      type="System.Web.ClientServices.Providers.ClientRoleProvider, System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" serviceUri="" cacheTimeout="86400" /> 
     </providers> 
    </roleManager> 
    </system.web> 
</configuration> 

、私が呼び出してみました:

System.IO.Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory); 
XmlConfigurator.Configure(); 

Main.cs(私のサービス)のOnStartメソッド機能では、I試みました:

_log = LogManager.GetLogger(typeof(Main)); 
_log.Error("Service started"); 

しかし、何も起こりませんが、ログを書き込むとログファイルが表示されません。

誰でも教えてください。

私は一日中解決策を探していましたが、何も見つかりませんでした。

を使用すると、上記の設定の問題を持っているように見え、

+2

サービスをどのアカウントで実行していますか?アカウントに**ログオンするフォルダへ**書き込み**アクセス権がありますか? – MickyD

+0

ProjectInstallerをLocalSystemに設定しました。 – Redplane

+0

ファイルを見つけることができないのは、最も一般的な事故でしょう。オペレーティングシステムのディレクトリにログファイルを書き込むのはまったくいいわけではありません。また、最後に見たい場所に書き込むこともできます。ファイルのパスを指定していないため、プログラムのデフォルトの作業ディレクトリに書き込まれます。サービスの場合、c:¥windows¥system32またはc:¥windows¥syswow64 –

答えて

1

ありがとう:

<appender name="RollingFileAppender" 

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 

上記の名前が一致しなければなりません。したがって、両方とも例えばRollingFileAppenderに設定する必要があります。

また、ログファイルの作成に関しては、以前のセキュリティ上の問題のために、ログファイルをプログラムファイルディレクトリや仮想ディレクトリ内のどこにでも書き込まないようにする傾向があります。現在、私はすべての私log4netのログファイルに対して次のようなものを使用しています:

<file type="log4net.Util.PatternString" value="${ALLUSERSPROFILE}/<Product Name>/Logs/<Program Name>/<Program Name>.log" /> 

${ALLUSERSPROFILE}は、上記のキーです。通常、このディレクトリには、仮想ディレクトリとプログラムファイルディレクトリのセキュリティ制限はありません。私はこの道を使い続けて以来、私は何のトラブルも感じていませんでした。

この環境変数は、Windows Vista、7,8、Server 2008などでProgramDataディレクトリに移動します。私はXPがあなたには別の場所にもかかわらず、リラックスした権限を持つディレクトリを使用すると思います。あなたがしなければならないのは、ファイルエクスプローラに%allusersprofile%と入力するだけで、そこに連れて行くことができます。

関連する問題