2016-07-20 11 views
0

私は、以下のように、.NET 4.5 & VS2013を使用して、私のワーカーロール用にlog4net fileappenderをセットアップしました。Azureワーカーの役割でlog4netログファイルにアクセスするには?

<configSections>  <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" /> </configSections> 

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net"> 
     <file value="Log.txt" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline" /> 
     </layout> 
     <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMin value="INFO" /> 
     <levelMax value="FATAL" /> 
     </filter> 
    </appender> 

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

ログファイルのパスを実行時に次の手順で設定します(簡潔に)。

プライベート静的読み取り専用log4net.ILogログ= log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod()。DeclaringType);

ログファイルのパスを設定 - FileAppender.File = RoleEnvironment.GetLocalResource(「LogFileStore」)ROOTPATH +「Log.txtファイル」

すべてが正常に動作し、正常に生成されたファイルを記録し、メッセージが労働者にそれに書かれていたが。ロール格納フォルダ(LogFileStore - 10MBは.csdefで定義されています)。それを修正する方法「、それは別のプロセスによって使用されているようにファイルにアクセスすることはできません

MailMessage mail = new MailMessage(FromAddress, ToAddress); 
SmtpClient client = new SmtpClient(); 
client.Port = 25; 
client.DeliveryMethod = SmtpDeliveryMethod.Network; 
client.UseDefaultCredentials = true; 
client.Host = Host; 
mail.Subject = "Error in the Data Load"; 
mail.IsBodyHtml = true; 
var htmlBody = string.Empty; 
htmlBody = "Error in Data Load and the Error is : </br></br>"; 
htmlBody += ErrorMessage; 
mail.Body = htmlBody; 
mail.Attachments.Add(new Attachment(RoleEnvironment.GetLocalResource("LogFileStore").RootPath + "Log.txt")); 
client.Send(mail); 
-

しかし、私はコード内のメールの添付ファイルにログファイルを添付しようとしたとき、それは例外をスローします。?

助けてください。 おかげ

Bhanu

答えて

0

をあなたが作成した一時ファイルを削除し、電子メールを送信した後。File.Copyを使用して、ログファイルのコピーを作成する必要があります。

File.Copy(RoleEnvironment.GetLocalResource("LogFileStore").RootPath + "Log.txt", RoleEnvironment.GetLocalResource("LogFileStore").RootPath + "LogTemp.txt", true); 

編集:

File.Copyが動作しない場合は、あなたが他の二つのオプションのいずれか試すことができます。

1 - アプリでlog4netの設定の「アペンダ」セクションでは。それはそれだけではなく、ロックに全体の時間を保持するの書き込むたびを開いて、ファイルをロックする必要がありますようコンフィグ、

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

を追加これは、いくつかのパフォーマンスのオーバーヘッドがあります。

2 - それは動作しませんでしたFileShare.ReadWriteを使用してストリームにファイルの内容をコピーし、メールにストリームを添付したり、新しいファイルに書き込むと

string logFileText using (FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (StreamReader streamReader = new StreamReader(fileStream)) 
{ 
    //read stream to file or directly to memory stream and attach 
} 
+0

を添付してください。どういたしまして。別のプロセスで使用されているときに、どのようにコピーすることができますか? – Bhanu

+0

@Bhanu試してみる方法が2つ追加されました –

+0

MinimalLockはすでに上になっています。 FileStreamを使用したときと同じエラーが発生しました。運がない。 – Bhanu

関連する問題