2011-06-27 24 views
1

私はlog4netをWindowsサービスで動かそうとしています。コンソールアプリケーションでうまく動作します。Log4net with Windowsサービス

空のサービスを作成しました。唯一行うべきことは、ログステートメントをファイルに書き出すことです。

これは私の主な方法です。

log4net.Config.XmlConfigurator.Configure(); 
log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program)); 

log.Info("Test"); 

ServiceBase[] ServicesToRun; 
ServicesToRun = new ServiceBase[] 
{ 
    new Service1() 
}; 
ServiceBase.Run(ServicesToRun); 

これは私のapp.configファイルです:私が読んだすべてのものによると

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

<configuration> 
<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
</configSections> 

<log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="Test.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="1MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.SimpleLayout" /> 
    </appender> 

    <root> 
    <level value="ALL" /> 
    <appender-ref ref="RollingFileAppender" /> 
    </root> 
</log4net> 
</configuration> 

私もAssemblyInfo.csファイルに次の行を追加しましたこれは、サービスがインストールされているディレクトリにログファイルを作成するのに十分なはずです。これは実現しなかったとき、私はどちらか動作しませんでした

log4net.Config.XmlConfigurator.Configure(new FileInfo("C:\\Users\\Public\\app.config")); 

<file value="C:\Users\Public\Test.log" /> 

このよう絶対ディレクトリを入れてみました。潜在的に制限されたアカウントの下でサービスが実行されているので、おそらくそれはいくつかの狂気のアクセス許可の問題だと思ったが、私はちょうど管理者としてそれを実行しようとし、ファイルがまだ作成されていません。

私はここで間違っていますか?

答えて

1

これは私のセットアッププロジェクトで依存関係の問題であることが判明。インストーラーは毎回更新されたプロジェクトをインストールしていないため、変更は適用されていますが、インストールされていませんでした。

0

サービスが設定したパスに書き込めないと思います。専用のログディレクトリを使用して、このディレクトリに書き込むための十分な権限がサービスにあることを確認してください。

あなたの設定はapp.configをしている場合、これはそれを設定するのに十分です:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 
関連する問題