JsonLayout stops working with additional fields

Viewed 14

I am trying to add some additional fields but JsonLayout seems to fail with that. I am new to java and couldn't find out what am I missing...


import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.layout.JsonLayout;
import org.apache.logging.log4j.core.util.KeyValuePair;

public class Try {
    Logger logger;
    Try(){
        KeyValuePair[] kvs = {new KeyValuePair("hip", "hi")};
        System.out.println(kvs[0].toString());
        logger = (Logger) LogManager.getLogger("com.try1");
        logger.setLevel(Level.DEBUG);

        logger.addAppender(ConsoleAppender.newBuilder().setName("console.builder1")
                .setLayout(JsonLayout.newBuilder().setProperties(true)
                        .setAdditionalFields(kvs)
                        .setComplete(true)
                        .build())
                .build());
    }
    public void debug(String message){
        System.out.println(logger.isEnabled(Level.DEBUG));
        logger.debug(message);
    }
}

If i remove.setAdditionalFields(kvs) line everything just works magically. But with this log4j prints nothing.

1 Answers

For some reason if you want to add additional fields then you will also need to set default Configuration:

import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.Logger;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.config.DefaultConfiguration;
import org.apache.logging.log4j.core.layout.JsonLayout;
import org.apache.logging.log4j.core.util.KeyValuePair;

public class Try {
    Logger logger;
    Try(){
        KeyValuePair[] kvs = {new KeyValuePair("hip", "hi")};
        System.out.println(kvs[0].toString());
        logger = (Logger) LogManager.getLogger("com.try1");
        logger.setLevel(Level.DEBUG);

        logger.addAppender(ConsoleAppender.newBuilder().setName("console.builder1")
                .setLayout(JsonLayout.newBuilder()
                        .setProperties(true)
                        .setConfiguration(new DefaultConfiguration()) // magic happens here...
                        .setAdditionalFields(kvs)
                        .setComplete(true)
                        .build())
                .build());
    }
    public void debug(String message){
        System.out.println(logger.isEnabled(Level.DEBUG));
        logger.debug(message);
    }
}

Related