2016-04-26 48 views
0

いくつかの製品のデータを移動するために、Log4Netを使用して進行状況を追跡するC#コンソールアプリケーションを作成しました。 Log4NetはコンソールアプリApp.Configファイルで設定され、現在ConsoleAppenderとRollingLogFileAppenderの2つのアペンダーがあります。Log4Netを使用しているWindowsサービスを実行しているアプリケーション

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs\Log.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger %method - %message%newline%exception" /> 
    </layout> 
</appender> 
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date %-5level %logger %method - %message%newline%exception" /> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    <appender-ref ref="ConsoleAppender" /> 
</root> 

このアプリケーションとそのログは、スタンドアロンで実行されているときに機能します。今、このコンソールアプリケーションの実行を自動化するために、コンソールアプリケーションを実行するためのWindowsサービスを作成しています。アプリケーションはユーザー入力を必要としないので、サービスを実行するときに問題を予測しました。サービスが実行されると、コンソールアプリケーションが正常に呼び出され、その結果が表示されますが、ログは機能していないようです。実行可能ファイルの場所にあるログは変更されていないため、マシンの別の場所でログの別のインスタンスを見つけることができません。サービスはLocalSystemとして実行されているため、アクセス許可は問題ではありません。私は、次の設定でアプリケーションを呼び出して試してみました:

ProcessStartInfo processStartInfo = new ProcessStartInfo(@"C:\Constellation\Dev\Caelum\Caelum\bin\Debug\Caelum.exe"); 
processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; 
processStartInfo.CreateNoWindow = true; 
processStartInfo.UseShellExecute = false; 
processStartInfo.RedirectStandardError = true; 
processStartInfo.RedirectStandardInput = true; 
processStartInfo.RedirectStandardOutput = true; 

私は、出力リダイレクトととなしの両方試してみましたし、どちらも働きました。どんな提案も大歓迎です。

+0

設定をどのように設定しましたか?それはApp.config、または別のファイルですか? –

+0

サービスが実行されているアカウントに、ログが保存されている場所への書き込み権限がありますか? – wimh

+0

@ RB。 Log4Netの設定はApp.Configファイルにあります。 –

答えて

3

実行ファイルは、配置した場所とまったく同じ場所で実行されないことがあります。私のアプリケーションはすでにsystem32フォルダのどこかで実行されていました。

ログファイルへの相対パスの代わりに絶対パスを指定して、問題が解決するかどうかを確認してください。

同様の問題については、hereを参照してください。

+0

最近チェックしたことはありませんが、windows/system32は常にサービスプロセスのデフォルトの現在のフォルダに使用されていたので、ログファイルのフルパスを追加してください。 –

+0

ログファイルのパスを絶対パスに変更し、 'Directory.SetCurrentDirectory'を追加しました。 Log4Netは正しくロギングしています。パスを絶対パスに変更しても機能しませんでした。ありがとう! –

0

App.configがWindowsサービスによって読み取られていることを確認するには、以下を参照してください。 https://stackoverflow.com/a/14074843/6256551

答えの関連部分はここにある:

「あなたは、対応する.exe.configファイルが見つからない場合、サービス内のコードがデフォルト値に戻って落下することも可能である。こので。その場合は、適切に名前を付けてフォーマットされた設定ファイルをサービスの実行可能ファイルの横に置き、サービスを再起動しても問題ありません。

関連する問題