Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        protected internal override void Write(StringBuilder b)
        {
            TextStreamWriter file = LockWriter();

            try {
                file.Write(b);
            } finally {
                Monitor.Exit(_fileSync);
            }
        }
Ejemplo n.º 4
0
 TextStreamWriter LockWriter()
 {
     Monitor.Enter(_fileSync);
     try {
         if (_file != null)
         {
             if (_metricDue > DateTime.UtcNow || !CloseCurrent())
             {
                 return(_file);
             }
         }
         return(_file = CreateWriter());
     } catch {
         Monitor.Exit(_fileSync);
         throw;
     }
 }
Ejemplo n.º 5
0
        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]);
                }
        }
Ejemplo n.º 6
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);
                }
        }