Search in sources :

Example 1 with ObjectAppender

use of org.spf4j.io.ObjectAppender in project spf4j by zolyfarkas.

the class LogPrinter method printObject.

private static void printObject(@Nullable final Object obj, final Appendable wr, final EscapeJsonStringAppendableWrapper wrapper) throws IOException {
    if (obj == null) {
        wr.append("null");
    } else {
        ObjectAppender ostrApp = TO_STRINGER.apply(obj.getClass());
        MimeType type = ostrApp.getAppendedType();
        if ("json".equalsIgnoreCase(type.getSubType())) {
            ostrApp.append(obj, wr);
        } else {
            wr.append('"');
            ostrApp.append(obj, wrapper);
            wr.append('"');
        }
    }
}
Also used : ObjectAppender(org.spf4j.io.ObjectAppender) MimeType(javax.activation.MimeType)

Example 2 with ObjectAppender

use of org.spf4j.io.ObjectAppender in project spf4j by zolyfarkas.

the class Slf4jMessageFormatterTest method testFormatter2.

@Test
public void testFormatter2() throws IOException {
    ConfigurableAppenderSupplier appSupp = new ConfigurableAppenderSupplier();
    LOG.debug("ConfAppenderSupp = {}", appSupp);
    StringBuilder sb = new StringBuilder();
    final long currentTimeMillis = System.currentTimeMillis();
    Slf4jMessageFormatter.format(sb, "bla bla {}", appSupp, new java.sql.Date(currentTimeMillis));
    Assert.assertEquals("bla bla " + DateTimeFormats.DT_FORMAT.format(Instant.now()), sb.toString());
    sb.setLength(0);
    Method method = new Method("c1", "m1");
    int written = Slf4jMessageFormatter.format(sb, "bla bla {}", appSupp, method);
    Assert.assertEquals("bla bla {\"declaringClass\":\"c1\",\"name\":\"m1\"}", sb.toString());
    Assert.assertEquals(1, written);
    sb.setLength(0);
    written = Slf4jMessageFormatter.format(1, sb, "bla bla {}", appSupp, "ifff", method);
    Assert.assertEquals("bla bla {\"declaringClass\":\"c1\",\"name\":\"m1\"}", sb.toString());
    Assert.assertEquals(2, written);
    sb.setLength(0);
    written = Slf4jMessageFormatter.format(sb, "bla bla {}", appSupp, method, "yohooo");
    LOG.debug("formatted message: {}", sb);
    Assert.assertEquals(1, written);
    sb.setLength(0);
    written = Slf4jMessageFormatter.format(sb, "bla bla {}", appSupp);
    LOG.debug("formatted message: {}", sb);
    Assert.assertEquals(0, written);
    sb.setLength(0);
    EscapeJsonStringAppendableWrapper escaper = new EscapeJsonStringAppendableWrapper(sb);
    Slf4jMessageFormatter.format(escaper, "bla bla {} {}", appSupp, "\n\u2013\u0010", new int[] { 1, 2, 3 });
    LOG.debug("formatted message: {}", sb);
    Assert.assertEquals("bla bla \\n–\\u0010 [1, 2, 3]", sb.toString());
    appSupp.replace(CoreTextMediaType.TEXT_PLAIN, String.class, (final ObjectAppender<? super String> input) -> new ObjectAppender<String>() {

        @Override
        public void append(final String object, final Appendable appendTo) throws IOException {
            try (AppendableLimiterWithOverflow limiter = new AppendableLimiterWithOverflow(90, File.createTempFile("string", ".overflow"), "...@", StandardCharsets.UTF_8, appendTo)) {
                limiter.append(object);
            }
        }
    });
    sb.setLength(0);
    Slf4jMessageFormatter.format(sb, "bla bla {}", appSupp, "012345678901234567890123456789012345678901234567" + "89012345678901234567890123456789012345678901234567890123456789");
    LOG.debug("formatted message: {}", sb);
    Assert.assertThat(sb.toString(), Matchers.containsString("...@"));
}
Also used : Method(org.spf4j.base.avro.Method) IOException(java.io.IOException) AppendableLimiterWithOverflow(org.spf4j.io.AppendableLimiterWithOverflow) ConfigurableAppenderSupplier(org.spf4j.io.ConfigurableAppenderSupplier) ObjectAppender(org.spf4j.io.ObjectAppender) Test(org.junit.Test)

Example 3 with ObjectAppender

use of org.spf4j.io.ObjectAppender in project spf4j by zolyfarkas.

the class LogPrinter method printJsonObject.

/**
 * Function that will write the Object as a json representation.
 * If json appender not available a json string value will be written.
 * @param obj
 * @param wr
 * @param wrapper
 * @throws IOException
 */
private void printJsonObject(@Nullable final Object obj, final BufferedAppendable app) throws IOException {
    if (obj == null) {
        app.getAppendable().append("null");
    } else {
        ObjectAppender ostrApp = toStringer.get(CoreTextMediaType.APPLICATION_JSON, obj.getClass());
        if (ostrApp != null) {
            int currentPos = app.getCurrentPos();
            try {
                ostrApp.append(obj, app.getAppendable(), toStringer);
                return;
            } catch (IOException | RuntimeException e) {
                app.resetPos(currentPos);
            }
        }
        Appendable wr = app.getAppendable();
        Appendable wrapper = app.getJsonStringEscapingAppendable();
        ostrApp = toStringer.get(CoreTextMediaType.TEXT_PLAIN, obj.getClass());
        wr.append('"');
        int currentPos = app.getCurrentPos();
        try {
            ostrApp.append(obj, wrapper, toStringer);
        } catch (IOException | RuntimeException e) {
            app.resetPos(currentPos);
            exHandle(obj, wrapper, e);
        }
        wr.append('"');
    }
}
Also used : ObjectAppender(org.spf4j.io.ObjectAppender) IOException(java.io.IOException) UncheckedIOException(java.io.UncheckedIOException)

Aggregations

ObjectAppender (org.spf4j.io.ObjectAppender)3 IOException (java.io.IOException)2 UncheckedIOException (java.io.UncheckedIOException)1 MimeType (javax.activation.MimeType)1 Test (org.junit.Test)1 Method (org.spf4j.base.avro.Method)1 AppendableLimiterWithOverflow (org.spf4j.io.AppendableLimiterWithOverflow)1 ConfigurableAppenderSupplier (org.spf4j.io.ConfigurableAppenderSupplier)1