View Javadoc
1   package com.github.triceo.splitlog.api;
2   
3   import java.util.Date;
4   import java.util.List;
5   
6   /**
7    * The purpose of classes implementing this interface is to interpret the log
8    * files. Each implementation should be familiar with one type of log file (i.e.
9    * JBoss logging or Logback) and be able to interpret the messages and their
10   * lines.
11   */
12  public interface TailSplitter {
13  
14      /**
15       * Read the message and find the date when the message was submitted.
16       *
17       * @param raw
18       *            Raw, untreated lines of the message.
19       * @return Date from the message, or null if not found.
20       */
21      Date determineDate(final List<String> raw);
22  
23      /**
24       * Read the message and try to identify an exception stack trace within.
25       *
26       * @param raw
27       *            Raw, untreated lines of the message.
28       * @return Exception data if found, null otherwise.
29       */
30      ExceptionDescriptor determineException(final List<String> raw);
31  
32      /**
33       * Messages in the log can contain information as to what logged them. This
34       * would typically be a Java package name. This method will try to return
35       * that.
36       *
37       * @param raw
38       *            Raw, untreated lines of the message.
39       * @return Null if not found.
40       */
41      String determineLogger(final List<String> raw);
42  
43      /**
44       * Read the message and try to find its severity.
45       *
46       * @param raw
47       *            Raw, untreated lines of the message.
48       * @return Severity included in the message, {@link MessageSeverity#UNKNOWN}
49       *         otherwise.
50       */
51      MessageSeverity determineSeverity(final List<String> raw);
52  
53      /**
54       * Read the message and try to find its type.
55       *
56       * @param raw
57       *            Raw, untreated lines of the message.
58       * @return Type guessed from the message, {@link MessageType#LOG} if
59       *         undetermined.
60       */
61      MessageType determineType(final List<String> raw);
62  
63      /**
64       * Whether or not this particular line from the log starts a new log
65       * message. If so, it will be used to trigger a {@link Message} being
66       * produced and possibly stored.
67       *
68       * @param line
69       *            Line from the log.
70       * @return True if this is the first line of a new log message.
71       */
72      boolean isStartingLine(final String line);
73  
74      /**
75       * Take a line from the log and attempt to strip it of metadata, such as
76       * severity, type and date.
77       *
78       * @param line
79       *            Line from the log.
80       * @return The same line, stripped of metadata. Usually just the actual
81       *         information being logged.
82       */
83      String stripOfMetadata(final String line);
84  
85  }