2017-10-03 3 views
0

私はAzureウェブジョブを使用して特定のタスクをスケジュールしています。 WebジョブはAzure Webアプリケーションで正常にデプロイされますが、ログファイルを保存するapp_dataフォルダのパスを相対的に特定することはできません。 (ウェブの仕事をdに位置しています:ホーム\サイト\ wwwrootに\ App_Dataにジョブがトリガ\ \ \ webjobname \)Azureウェブジョブとlog4net

以下(絶対)パスは動作します:次のパスが動作しない

<file value="d:\\home\\site\\wwwroot\\App_Data\\Logs\\WebJobLog.txt" /> 

<file value="../../App_Data/Logs/WebJobLog.txt" /> 
<file value="/App_Data/Logs/WebJobLog.txt" /> 
<file value="~/App_Data/Logs/WebJobLog.txt" /> 

誰でもファイルパスを相対的に設定する方法はわかりますか?

+0

なぜこのパスが変わるのかわからない – 4c74356b41

答えて

1

は、あなたのパスを指定することができます。

<file value="App_Data\\Logs\\WebJobLog.log" /> 

WebJobsのために、あなたのwebjobが、この時に、実行されているため、デフォルトで一時ディレクトリ(例:%TEMP%\jobs\{job type}\{job name}\{random name})にコピーすることだろうがあなたのログファイルが一時フォルダの下にあることを示します。詳細は、WebJob Working Directoryを参照してください。

お客様の要件に基づいて、log4net.Util.PatternStringを利用し、env変換パターンを使用して、David Ebboによって提案された環境変数(WEBROOT_PATH)を取得することができます。あなたは次のようにパスを変更する必要があります。

<file type="log4net.Util.PatternString" value="%env{WEBROOT_PATH}\\App_Data\\Logs\\WebJobLog.log" /> 

また、あなたはこのissueを参照してください可能性があり、このアプローチのために、プログラムであなたのFileAppenderを作成することができます。さらに、webjobsの組み込みログを確認することもできますhere

1

WebJobがどこに配置されているかに関する相対的な前提をハードコーディングすることは避けてください。

あなたの目標はAPP_DATAフォルダを取得する場合は、d:\home\site\wwwrootを指すWEBROOT_PATH環境変数を見て、その後、APP_DATAとそれを組み合わせることができます。あなたの目的を達成するために、次のように一般的に