をテストしながら、私はただのxUnit 2.1にアップデートし、同じファイルにログオンします。 私はdifferentsアセンブリからの並列で実行されている多くのテストを通じて、特定の名前の同じファイルにログするためにこのメソッドを使用しています。 問題は、私が(でもTextWriter.Synchronizedを使用して)同時実行を管理することはできませんで、私は私のテストを実行するたびに、異なるテストは言う:のxUnitと
エラーは次のとおりです。
Message: System.IO.IOException : The process cannot access the file 'C:\LOGS\myFileName-20170510.txt' because it is being used by another process.
私の方法は次のとおりです。
private static void WriteToLogFile(string fileName, string strMessage)
{
DateTime utcNow = DateTime.UtcNow;
lock (fileName)
{
using (StreamWriter w = File.AppendText(fileName + utcNow.Year + utcNow.Month.ToString("00") + utcNow.Day.ToString("00") + ".txt"))
{
w.WriteLine("{0};{1};{2}", DateTime.UtcNow, SecurityHelper.GetPrincipalName(), strMessage);
w.Flush();
w.Close();
}
}
}
私も試してみました(しかし、これは助けていません):
private static void WriteToLogFile(string fileName, string strMessage)
{
DateTime utcNow = DateTime.UtcNow;
lock (fileName)
{
using (StreamWriter w = File.AppendText(fileName + utcNow.Year + utcNow.Month.ToString("00") + utcNow.Day.ToString("00") + ".txt"))
{
w.WriteLine("{0};{1};{2}", DateTime.UtcNow, SecurityHelper.GetPrincipalName(), strMessage);
w.Flush();
w.Close();
}
}
}
private static readonly ConcurrentDictionary<string, object> Tokens = new ConcurrentDictionary<string, object>();
private static object GetToken(string fileName)
{
if (!Tokens.ContainsKey(fileName))
Tokens.TryAdd(fileName, new object());
return Tokens[fileName];
}
これはxUnitのいくつかの奇妙な動作によるものですか? ありがとうございます。ライン後
、この生産コードまたは単にテストコードで使用されていますか? –
@TheoLenndorff! – Cirelli94
これはあなたの質問に答えるのに役立つわけではありませんが、将来、非常に、非常に、非常に多くの痛みを避けたい場合は、独自のロガーを動かす代わりにロガーライブラリを使用してください。 log4netまたはnlogを使用します。 System.Diagnostic.Traceでも良いです。お願いします。あなた自身のために...可能ならそれを考慮してください。誰かがFile.AppendText(または類似のもの)をロギングメカニズムとして使用するたびに、子猫が死ぬ。そしてはい...子猫も私のために死んだ。私はもう死んだ子猫を見たくない。死んだ子猫はどこにでも!彼らは私に話している。彼らは私の魂が欲しい。 NOOO ... *正気がキックする*真剣に。考慮して下さい。 –