package com.netflix.suro.input; import com.google.inject.Inject; import com.netflix.suro.ClientConfig; import org.apache.log4j.spi.LoggingEvent; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; public class StaticLog4jFormatter implements Log4jFormatter { private final DateTimeFormatter fmt; private final ClientConfig config; @Inject public StaticLog4jFormatter(ClientConfig config) { this.config = config; fmt = DateTimeFormat.forPattern(config.getLog4jDateTimeFormat()); } @Override public String format(LoggingEvent event) { StringBuilder sb = new StringBuilder(); sb.append(fmt.print(new DateTime())).append('\t'); sb.append(event.getLevel()).append('\t').append(event.getLoggerName()); Object obj = event.getMessage(); sb.append('\t').append(obj.toString()); // Extract exceptions String[] s = event.getThrowableStrRep(); if (s != null && s.length > 0) { sb.append('\n').append(s[0]); for (int i = 1; i < s.length; i++) { sb.append('\n').append(s[i]); } } return sb.toString(); } @Override public String getRoutingKey() { return config.getLog4jRoutingKey(); } }