package net.i2p.util; /* * free (adj.): unencumbered; not under the control of others * Written by jrandom in 2003 and released into the public domain * with no warranty of any kind, either expressed or implied. * It probably won't make your computer catch on fire, or eat * your children, but it might. Use at your own risk. * */ /** * Keep track of a log entry, unformatted. * */ class LogRecord { private final long _date; private final Class<?> _source; private final String _name; private final String _threadName; private final int _priority; private final String _message; private final Throwable _throwable; public LogRecord(Class<?> src, String name, String threadName, int priority, String msg, Throwable t) { _date = Clock.getInstance().now(); _source = src; _name = name; _threadName = threadName; _priority = priority; _message = msg; _throwable = t; } public long getDate() { return _date; } public Class<?> getSource() { return _source; } public String getSourceName() { return _name; } public String getThreadName() { return _threadName; } public int getPriority() { return _priority; } public String getMessage() { return _message; } public Throwable getThrowable() { return _throwable; } private static final int MATCH_LEN = 40; /** * Matches source class, first part of message string, and throwable class only. * Used only by LogWriter to eliminate dups. * @since 0.9.3 */ @Override public boolean equals(Object o) { if (!(o instanceof LogRecord)) return false; LogRecord r = (LogRecord) o; return _source == r._source && ((_message == null && r._message == null) || (_message != null && r._message != null && ((_message.length() <= MATCH_LEN) ? _message.equals(r._message) : _message.regionMatches(0, r._message, 0, MATCH_LEN)))) && ((_throwable == null && r._throwable == null) || (_throwable != null && r._throwable != null && _throwable.getClass() == r._throwable.getClass())); } @Override public int hashCode() { return _message != null ? _message.hashCode() : 0; } }