예제 #1
0
        public void Receive()
        {
            var dto = new LogEntryDTO("MyApp", "SomeTarget", new LogEntry
                {
                    CreatedAt = DateTime.Now,
                    Exception = new Exception("Something awful"),
                    LoggedType = typeof (LogEntryDTO),
                    MethodName = "Some",
                    LogLevel = LogLevel.Info,
                    Message = "No no",
                    ThreadId = 20,
                    UserName = "******"
                });
            var queue = new MessageQueue(Queue.Name) {Formatter = new XmlMessageFormatter(new[] {typeof (LogEntryDTO)})};
            queue.Send(new Message(dto));

            var receiver = new Receiver();
            var listenr = new QueueReader(Queue.Name, receiver);
            receiver.Event.WaitOne(1000);

            Assert.NotEmpty(receiver.Entries);
            var entry = receiver.Entries.First();
            Assert.Equal("Arnwe", entry.UserName);
            Assert.Equal("No no", entry.Message);
        }
예제 #2
0
        public void Send100()
        {
            Queue.Reset();

            SimpleLogManager.Instance.AddMessageQueue("MyApp", Queue.Name);
            var logger = SimpleLogManager.Instance.GetLogger(GetType());
            for (int i = 0; i < 100; i++)
            {
                logger.Warning("Hello world :" + i);    
            }
            

            var messages = new LogEntryDTO[100];
            var queue = new MessageQueue(Queue.Name) { Formatter = new XmlMessageFormatter(new[] { typeof(LogEntryDTO) }) };
            for (int i = 0; i < 100; i++)
            {
                var msg = queue.Receive(TimeSpan.FromSeconds(10));
                Assert.NotNull(msg);

                var dto = (LogEntryDTO) msg.Body;
                var pos = dto.Message.IndexOf(':');
                var number = int.Parse(dto.Message.Substring(pos + 1));
                messages[number] = dto;
            }

            for (int i = 100 - 1; i >= 0; i--)
            {
                Assert.NotNull(messages[i]);
            }
            
        }
예제 #3
0
        /// <summary>
        /// Enqueue to be written
        /// </summary>
        /// <param name="entry"></param>
        /// <remarks>
        /// The entry might be written directly in the same thread or enqueued to be written
        /// later. It's up to each implementation to decide. Keep in mind that a logger should not
        /// introduce delays in the thread execution. If it's possible that it will delay the thread,
        /// enqueue entries instead and write them in a seperate thread.
        /// </remarks>
        public void Enqueue(LogEntry entry)
        {
            if (entry == null) throw new ArgumentNullException("entry");

            if (_filters.Any(filter => !filter.CanLog(entry)))
            {
                return;
            }

            var dto = new LogEntryDTO(_applicationName, _module, entry);
            var message = new Message(dto);
            _queue.Send(message);
        }
예제 #4
0
 /// <summary>
 /// Received a new log entry.
 /// </summary>
 /// <param name="dto">Log entry</param>
 public void ReceivedLogEntry(LogEntryDTO dto)
 {
     Entries.Add(dto);
     Event.Set();
 }