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); }
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]); } }
/// <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); }
/// <summary> /// Received a new log entry. /// </summary> /// <param name="dto">Log entry</param> public void ReceivedLogEntry(LogEntryDTO dto) { Entries.Add(dto); Event.Set(); }