public void WriteRecord_OneRecordWithRecordFormatter_RecordIsFormattedAndWritten() { var records = new string[] { "Record 1" }; var formattedRecords = new string[] { "Formatted Record 1" }; var recordFormatter = MockRepository.GenerateMock <IRecordFormatter>(); recordFormatter.Expect(x => x.Format(Arg <object> .Is.Equal(records[0]))).Return(formattedRecords[0]).Repeat.Once(); using (var stream = new MemoryStream()) using (var streamWriter = new TextStreamWriter(stream, recordFormatter)) { streamWriter.Open(); foreach (var record in records) { streamWriter.WriteRecord(record); } streamWriter.Commit(); TextStreamWriterTests.AssertStreamContentMatchesRecords(stream, formattedRecords); } recordFormatter.VerifyAllExpectations(); }
private TextStreamWriter CreateWriter() { string fileName = _fileBaseName; if (string.IsNullOrEmpty(fileName)) { fileName = Path.GetFullPath("log.log"); } DirectoryInfo dinfo = new DirectoryInfo(Path.GetDirectoryName(fileName)); string name = Path.GetFileNameWithoutExtension(fileName); if (!dinfo.Exists) { dinfo.Create(); } FileStream stream = null; using (StringBuilderCache c = StringBuilderCache.Acquire()) { c.Builder.Append(Path.Combine(dinfo.FullName, name)).Append('-'); string ext = Path.GetExtension(fileName); FileRollOver rollOver = _settings.RollOver; if (rollOver >= FileRollOver.Monthly && rollOver <= FileRollOver.Hourly) { GetDateMetric(c, rollOver); } else if (rollOver == FileRollOver.Size) { stream = GetCounterFile(c.Builder, dinfo, name, ext); } else { _metricDue = DateTime.MaxValue; } c.Builder.Append(ext); fileName = c.ToString(); } if (stream == null) { stream = new FileStream(fileName, FileMode.Append, FileAccess.Write, FileShare.Read); } //} catch ( IOException ) { // fileName += Guid.NewGuid().ToString(); // stream = new FileStream( fileName, FileMode.Append, FileAccess.Write, FileShare.Read ); //} var file = new TextStreamWriter(stream, Encoding.UTF8, 4096, true); using (StringBuilderCache c = StringBuilderCache.Acquire()) { c.Builder.Append("## ") .Append(stream.Length > 0 ? "Append" : "Created") .Append('[') .Append(DateTime.UtcNow.ToString("s", DateTimeFormatInfo.InvariantInfo)) .Append(']') .Append(Environment.NewLine); file.Write(c); } return(file); }
protected internal override void Write(StringBuilder b) { TextStreamWriter file = LockWriter(); try { file.Write(b); } finally { Monitor.Exit(_fileSync); } }
TextStreamWriter LockWriter() { Monitor.Enter(_fileSync); try { if (_file != null) { if (_metricDue > DateTime.UtcNow || !CloseCurrent()) { return(_file); } } return(_file = CreateWriter()); } catch { Monitor.Exit(_fileSync); throw; } }
public void WriteRecord_RecordFormatterThrowsException_ExceptionIsPropogated() { var records = new string[] { "Record 1" }; var recordFormatter = MockRepository.GenerateMock <IRecordFormatter>(); recordFormatter.Stub(x => x.Format(Arg <object> .Is.Anything)).Throw(new InternalTestFailureException()); using (var stream = new MemoryStream()) using (var streamWriter = new TextStreamWriter(stream, recordFormatter)) { streamWriter.Open(); streamWriter.WriteRecord(records[0]); } }
public void WriteRecord_OneRecord_RecordIsWritten() { var records = new string[] { "Record 1" }; using (var stream = new MemoryStream()) using (var streamWriter = new TextStreamWriter(stream)) { streamWriter.Open(); foreach (var record in records) { streamWriter.WriteRecord(record); } streamWriter.Commit(); TextStreamWriterTests.AssertStreamContentMatchesRecords(stream, records); } }