@Test public void testFormatObjectStringBuilderDefaultPattern() { final DatePatternConverter converter = DatePatternConverter.newInstance(null); final StringBuilder sb = new StringBuilder(); converter.format("nondate", sb); final String expected = ""; // only process dates assertEquals(expected, sb.toString()); }
@Test public void testGetPatternReturnsNullForUnix() { final String[] options = {"UNIX"}; assertNull(DatePatternConverter.newInstance(options).getPattern()); }
@Test public void testFormatLogEventStringBuilderIso8601TimezoneUTC() { final LogEvent event = new MyLogEvent(); final DatePatternConverter converter = DatePatternConverter.newInstance(new String[] {"ISO8601", "UTC"}); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final TimeZone tz = TimeZone.getTimeZone("UTC"); final SimpleDateFormat sdf = new SimpleDateFormat(converter.getPattern()); sdf.setTimeZone(tz); final long adjusted = event.getTimeMillis() + tz.getDSTSavings(); final String expected = sdf.format(new Date(adjusted)); // final String expected = "2011-12-30T09:56:35,987"; assertEquals(expected, sb.toString()); }
@Override public void format(final StringBuilder toAppendTo, final Object... objects) { for (final Object obj : objects) { if (obj instanceof Date) { format(obj, toAppendTo); break; } } }
@Test public void testNewInstanceAllowsNullParameter() { DatePatternConverter.newInstance(null); // no errors }
public void format(final long timestampMillis, final StringBuilder output) { if (Constants.ENABLE_THREADLOCALS) { formatWithoutAllocation(timestampMillis, output); } else { formatWithoutThreadLocals(timestampMillis, output); } }
private Formatter createFormatter(final String[] options) { final FixedDateFormat fixedDateFormat = FixedDateFormat.createIfSupported(options); if (fixedDateFormat != null) { return createFixedFormatter(fixedDateFormat); } return createNonFixedFormatter(options); }
/** * Constructor. * @param pattern The file pattern. */ public PatternProcessor(final String pattern) { this.pattern = pattern; final PatternParser parser = createPatternParser(); final List<PatternConverter> converters = new ArrayList<>(); final List<FormattingInfo> fields = new ArrayList<>(); parser.parse(pattern, converters, fields, false, false, false); final FormattingInfo[] infoArray = new FormattingInfo[fields.size()]; patternFields = fields.toArray(infoArray); final ArrayPatternConverter[] converterArray = new ArrayPatternConverter[converters.size()]; patternConverters = converters.toArray(converterArray); for (final ArrayPatternConverter converter : patternConverters) { if (converter instanceof DatePatternConverter) { final DatePatternConverter dateConverter = (DatePatternConverter) converter; frequency = calculateFrequency(dateConverter.getPattern()); } } }
private Formatter getThreadLocalFormatter() { WeakReference<Formatter> refResult = threadLocalFormatter.get(); Formatter result = refResult == null ? null : refResult.get(); if (result == null) { result = createFormatter(options); refResult = new WeakReference<>(result); threadLocalFormatter.set(refResult); } return result; }
/** * Obtains an instance of pattern converter. * * @param options options, may be null. * @return instance of pattern converter. */ public static DatePatternConverter newInstance(final String[] options) { return new DatePatternConverter(options); }
private void formatWithoutAllocation(final long timestampMillis, final StringBuilder output) { getThreadLocalFormatter().formatToBuffer(timestampMillis, output); }
return createFixedFormatter(FixedDateFormat.create(FixedFormat.DEFAULT, tz));
@Test public void testFormatLogEventStringBuilderIso8601TimezoneJST() { final LogEvent event = new MyLogEvent(); final String[] optionsWithTimezone = {ISO8601_FORMAT, "JST"}; final DatePatternConverter converter = DatePatternConverter.newInstance(optionsWithTimezone); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); // JST=Japan Standard Time: UTC+9:00 final TimeZone tz = TimeZone.getTimeZone("JST"); final SimpleDateFormat sdf = new SimpleDateFormat(converter.getPattern()); sdf.setTimeZone(tz); final long adjusted = event.getTimeMillis() + tz.getDSTSavings(); final String expected = sdf.format(new Date(adjusted)); // final String expected = "2011-12-30T18:56:35,987"; // in CET (Central Eastern Time: Amsterdam) assertEquals(expected, sb.toString()); }
/** * Appends formatted date to string buffer. * * @param date date * @param toAppendTo buffer to which formatted date is appended. */ public void format(final Date date, final StringBuilder toAppendTo) { format(date.getTime(), toAppendTo); }
/** * Obtains an instance of pattern converter. * * @param options options, may be null. * @return instance of pattern converter. */ public static PatternConverter newInstance(final String[] options) { if (options == null || options.length == 0) { return DatePatternConverter.newInstance( new String[]{ "yyyy-MM-dd" }); } return DatePatternConverter.newInstance(options); } }
/** * Private constructor. * * @param options options, may be null. */ private DatePatternConverter(final String[] options) { super("Date", "date"); this.options = options == null ? null : Arrays.copyOf(options, options.length); this.formatter = createFormatter(options); cachedTime = new AtomicReference<>(new CachedTime(System.currentTimeMillis())); }
@Test public void testFormatDateStringBuilderIso8601() { final DatePatternConverter converter = DatePatternConverter.newInstance(ISO8601_FORMAT_OPTIONS); final StringBuilder sb = new StringBuilder(); converter.format(date(2001, 1, 1), sb); final String expected = "2001-02-01T14:15:16,123"; assertEquals(expected, sb.toString()); }
@Test public void testGetPatternReturnsNullForUnixMillis() { final String[] options = {"UNIX_MILLIS"}; assertNull(DatePatternConverter.newInstance(options).getPattern()); }
/** * {@inheritDoc} */ @Override public void format(final Object obj, final StringBuilder output) { if (obj instanceof Date) { format((Date) obj, output); } super.format(obj, output); }
@Test public void testFormatLogEventStringBuilderIso8601() { final LogEvent event = new MyLogEvent(); final DatePatternConverter converter = DatePatternConverter.newInstance(ISO8601_FORMAT_OPTIONS); final StringBuilder sb = new StringBuilder(); converter.format(event, sb); final String expected = "2011-12-30T10:56:35,987"; assertEquals(expected, sb.toString()); }