Reputation: 13
I'm upgrading a code from Log4j 1.X to Log4J 2.X.
I'd like to write a specific logger in a file using Log4j 2.X. I tried some code found on Log4j website but I can't seem to find any code that does the same.
Log4j 1.X code :
Logger LOCAL_LOGGER = Logger.getLogger(MyClass.class.getName());
PatternLayout layout = new PatternLayout("mylayoutpattern");
String logFile = "myFile";
FileAppender app = new FileAppender(layout, logFile, true);
LOCAL_LOGGER.addAppender(app);
LOCAL_LOGGER.setLevel(Level.ERROR);
Upvotes: 1
Views: 921
Reputation: 16045
In Log4j 2.x two main changes were introduced that concern your code:
org.apache.logging.log4j.Logger
that is returned from calls to LogManager.getLogger
is not concerned with layout and appenders. However if you are sure the underlying implementation is Log4j2 Core, you can cast it to org.apache.logging.log4j.core.Logger
(in the following code this is Logger
) and proceed as you used to.This sums up to the following code:
Logger logger = (Logger) LogManager.getLogger(MyClass.class.getName());
final PatternLayout layout = PatternLayout.newBuilder()//
.withPattern("mylayoutpattern")
.build();
final FileAppender appender = FileAppender.newBuilder()//
.setLayout(layout)
.withFileName("myFile")
.withAppend(true)
.build();
logger.addAppender(appender);
logger.setLevel(Level.ERROR);
Upvotes: 1