public void Add(LogEntry logEntry) { try { EnsureDirectoryExists(); StandardAnalyzer analyzer = new StandardAnalyzer(LUCENEVERSION); using (IndexWriter writer = new IndexWriter(FSDirectory.Open(new DirectoryInfo(IndexPath)), analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED)) { Document document = CreateDocument(logEntry); writer.AddDocument(document); writer.Optimize(); } } catch (Exception ex) { throw new SearchException(ex, "An error occured while adding entry '{0}' to the search index", logEntry.DateTime); } }
public ActionResult Search(string applicationName, string q) { Environment currentEnvironment = GetSelectedEnvironment(); ViewBag.EnvironmentName = currentEnvironment.Name; ViewBag.ApplicationName = applicationName; ViewBag.SearchQuery = q; IEnumerable<LogEntry> results = new LogEntry[0]; if (_configuration.IsLuceneEnabled) { var searchRepository = new SearchRepository(_configuration); string query = searchRepository.CreateLuceneSearchSyntax(applicationName, currentEnvironment.Name, q); results = searchRepository.Search(query); } else { // Use MongoDB's slower search. results = _repository.Search(currentEnvironment.Name, applicationName, q); } return View(results); }
private LogEntry ParseLogEntry(string environment, string server, string appName, string contents) { MatchCollection matches = _entryRegex.Matches(contents); LogEntry entry = null; if (matches.Count > 0) { try { Match match = matches[0]; entry = new LogEntry(); entry.Id = Guid.NewGuid(); entry.DateTime = DateTime.Parse(match.Groups["date"].Value); entry.Source = match.Groups["source"].Value; entry.Message = contents.Substring((match.Groups["source"].Index + 1) + match.Groups["source"].Length); entry.Level = "Error"; entry.Server = server; entry.ApplicationName = appName; entry.Environment = environment; FillExceptionType(entry); } catch (Exception) { // Ignore for now } } return entry; }
private void FillExceptionType(LogEntry entry) { if (string.IsNullOrEmpty(entry.Message)) return; string message = entry.Message; int start = message.LastIndexOf("Exception Type: "); if (start > -1) { int end = message.IndexOf(Environment.NewLine, start); if (end > -1) { int typeStart = start + "Exception Type: ".Length; string exceptionType = message.Substring(typeStart, end - typeStart); entry.ExceptionType = exceptionType; int messageStart = message.IndexOf("Message: ", start); if (messageStart > -1) { int messageEnd = message.IndexOf(Environment.NewLine, messageStart); if (messageEnd > -1) { messageStart = messageStart + "Message: ".Length; string exceptionMessage = message.Substring(messageStart, messageEnd - messageStart); entry.ExceptionMessage = exceptionMessage; } } } } }
private Document CreateDocument(LogEntry logEntry) { Document document = new Document(); document.Add(new Field("id", logEntry.Id.ToString(), Field.Store.YES, Field.Index.NO)); document.Add(new Field("environment", logEntry.Environment, Field.Store.YES, Field.Index.NOT_ANALYZED)); document.Add(new Field("server", logEntry.Server, Field.Store.YES, Field.Index.NOT_ANALYZED)); document.Add(new Field("application", logEntry.ApplicationName, Field.Store.YES, Field.Index.NOT_ANALYZED)); document.Add(new Field("date", logEntry.DateTime.ToShortDateString(), Field.Store.YES, Field.Index.NO)); document.Add(new Field("exceptionMessage", logEntry.ExceptionMessage??"", Field.Store.YES, Field.Index.ANALYZED)); document.Add(new Field("exceptionType", logEntry.ExceptionType ?? "", Field.Store.YES, Field.Index.ANALYZED)); document.Add(new Field("message", logEntry.Message ?? "", Field.Store.NO, Field.Index.ANALYZED)); document.Add(new Field("truncatedMessage", logEntry.TruncatedMessage, Field.Store.YES, Field.Index.NO)); return document; }
public virtual void Update(LogEntry logEntry) { EnsureDirectoryExists(); Delete(logEntry); Add(logEntry); }
public int Delete(LogEntry logEntry) { try { int count = 0; using (IndexReader reader = IndexReader.Open(FSDirectory.Open(new DirectoryInfo(IndexPath)), false)) { count += reader.DeleteDocuments(new Term("id", logEntry.Id.ToString())); } return count; } catch (Exception ex) { throw new SearchException(ex, "An error occured while deleting entry '{0}' from the search index", logEntry.DateTime); } }
public void Save(LogEntry entry) { _collection.InsertOneAsync(entry); }
public void Save(LogEntry entry) { LogEntries.Add(entry); }