私は小さなロガーを作成しています。ログファイルを一度開き、ログメッセージが到着するのを待って書き込み続け、プログラムの終了時にすべてを破棄します。リアクティブプログラミングを使用してFileStreamを開くために書き込む
私は、彼らが到着した反動メッセージを書き込むと開いたFileStreamを保つことができるかどうかはわかりませんよ。
私はバッファとして動作するConcurrentQueueと、キューを消費したusing
ステートメント内のループを持つ以前のソリューションから設計を更新したいと考えています。
具体的には、私は同時にusing
ステートメント構成を活用にしたいので、私は明示的にストリームとライターを閉じる必要はありませんし、反応性、ループレスプログラミングスタイルの。現在のところ、私はこれらのコンストラクトのどれかを一度に使用する方法しか知りません:using
/ループの組み合わせか、明示的なストリームクローズ/リアクティブの組み合わせです。あなたはObservable.Using
を使用する必要が
BufferBlock<LogEntry> _buffer = new BufferBlock<LogEntry>();
// CONSTRUCTOR
public DefaultLogger(string folder)
{
var filePath = Path.Combine(folder, $"{DateTime.Now.ToString("yyyy.MM.dd")}.log");
_cancellation = new CancellationTokenSource();
var observable = _buffer.AsObservable();
using (var stream = File.Create(_filePath))
using (var writer = new StreamWriter(stream))
using (var subscription = observable.Subscribe(entry =>
writer.Write(GetFormattedString(entry))))
{
while (!_cancellation.IsCancellationRequested)
{
// what do I do here?
}
}
}