public void GetFileNameReflectsTheFileName(FlushTrigger flushTrigger)
        {
            string filename          = $"{Guid.NewGuid()}.log";
            string logsDirectoryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "tests", $"logs-{Guid.NewGuid()}");
            var    listener          = new LocalTextFileListener(logsDirectoryPath, flushTrigger)
            {
                GetFileName = () => filename
            };

            FlushLogArgs flushLogArgs = CommonTestHelpers.Factory.CreateFlushLogArgs();

            listener.OnFlush(flushLogArgs);

            try
            {
                Assert.IsTrue(File.Exists(Path.Combine(logsDirectoryPath, filename)));
            }
            finally
            {
                if (Directory.Exists(logsDirectoryPath))
                {
                    Directory.Delete(logsDirectoryPath, true);
                }
            }
        }
        public LocalTextFileListener(
            string logsDirectoryPath,
            FlushTrigger flushTrigger,
            ITextFormatter textFormatter)
        {
            if (textFormatter == null)
            {
                throw new ArgumentNullException(nameof(textFormatter));
            }

            _logsDirectoryPath = NormalizeLogsDirectoryPath(logsDirectoryPath);

            if (flushTrigger == FlushTrigger.OnMessage)
            {
                _textListener = new MessageTextFileListener(this, textFormatter);
            }
            else
            {
                _textListener = new FlushTextFileListener(this, textFormatter);
            }
        }
예제 #3
0
 private void FlushImpl(FlushTrigger trigger)
 {
     try {
         // protect against multiple parallel calls to flush
         lock (_flushLock) {
             while (_queue.Count > 0)
             {
                 //do not flush less than batch size, if it is triggered by size; it can happen
                 //  if we have multiple batches in this loop, and at the end a few items left in the queue
                 if (_queue.Count < _batchSize && trigger == FlushTrigger.Count)
                 {
                     return;
                 }
                 var batch = _queue.DequeueMany(_batchSize);
                 Broadcast(batch);
             }
         } //lock
     } finally {
         _flushedSinceLastTimer = true; // timer handler will overwrite it
         _flushing = false;
     }
 } //method
 public void NullTextFormatterThrowsException(FlushTrigger flushTrigger)
 {
     var listener = new LocalTextFileListener("logs", flushTrigger, null);
 }
 public LocalTextFileListener(
     string logsDirectoryPath,
     FlushTrigger flushTrigger) : this(logsDirectoryPath, flushTrigger, new TextFormatter())
 {
 }