Log4j 2 Programmatic Configuration BAEL 1338 (#4057)
This commit is contained in:
parent
fad99fe44b
commit
7d41c7edb7
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0"?>
|
||||
<project
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>log4j2-programmatic-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>modify-xml-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<name>modify-xml-configuration</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
</project>
|
@ -0,0 +1,29 @@
|
||||
/**
|
||||
This class demonstrates on modifying the loaded xml configuration by
|
||||
extending XMLConfigurationFactory as defined in section 4.4 of
|
||||
"Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
package com.baeldung.log4j2.config;
|
||||
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.config.Configuration;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationFactory;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationSource;
|
||||
import org.apache.logging.log4j.core.config.Order;
|
||||
import org.apache.logging.log4j.core.config.plugins.Plugin;
|
||||
import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
|
||||
|
||||
@Plugin(name = "CustomConfigurationFactory", category = ConfigurationFactory.CATEGORY)
|
||||
@Order(50)
|
||||
public class CustomXMLConfigurationFactory extends XmlConfigurationFactory {
|
||||
|
||||
@Override
|
||||
public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
|
||||
return new MyXMLConfiguration(loggerContext, source);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getSupportedTypes() {
|
||||
return new String[] { ".xml", "*" };
|
||||
}
|
||||
}
|
@ -0,0 +1,35 @@
|
||||
/**
|
||||
This class demonstrates on overriding the configuration loaded through xml
|
||||
as defined in section 4.4 of "Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
package com.baeldung.log4j2.config;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.core.Appender;
|
||||
import org.apache.logging.log4j.core.Layout;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.appender.FileAppender;
|
||||
import org.apache.logging.log4j.core.config.Configuration;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationSource;
|
||||
import org.apache.logging.log4j.core.config.LoggerConfig;
|
||||
import org.apache.logging.log4j.core.config.xml.XmlConfiguration;
|
||||
import org.apache.logging.log4j.core.layout.PatternLayout;
|
||||
|
||||
public class MyXMLConfiguration extends XmlConfiguration {
|
||||
public MyXMLConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
|
||||
super(loggerContext, source);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doConfigure() {
|
||||
super.doConfigure();
|
||||
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
|
||||
Configuration config = ctx.getConfiguration();
|
||||
LoggerConfig loggerConfig = config.getLoggerConfig("com");
|
||||
final Layout layout = PatternLayout.createLayout("[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n", null, config, null, null, false, false, null, null);
|
||||
Appender appender = FileAppender.createAppender("target/test.log", "false", "false", "File", "true", "false", "false", "4000", layout, null, "false", null, config);
|
||||
loggerConfig.addAppender(appender, Level.DEBUG, null);
|
||||
addAppender(appender);
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Configuration monitorInterval="60">
|
||||
<Appenders>
|
||||
<Console name="console" target="SYSTEM_OUT">
|
||||
<PatternLayout
|
||||
pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
|
||||
</Console>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<Logger name="com" additivity="false" level="info">
|
||||
<AppenderRef ref="console" />
|
||||
</Logger>
|
||||
<Root>
|
||||
<AppenderRef ref="console" />
|
||||
</Root>
|
||||
</Loggers>
|
||||
</Configuration>
|
@ -0,0 +1,23 @@
|
||||
package com.baeldung.log4j2.logtest;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.config.plugins.util.PluginManager;
|
||||
import org.junit.Test;
|
||||
|
||||
|
||||
public class LogTest {
|
||||
static{
|
||||
PluginManager.addPackage("com.baeldung.log4j2.config");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleProgrammaticConfiguration() {
|
||||
Logger logger = LogManager.getLogger();
|
||||
LoggerContext ctx = (LoggerContext) LogManager.getContext();
|
||||
logger.debug("Debug log message");
|
||||
logger.info("Info log message");
|
||||
logger.error("Error log message");
|
||||
}
|
||||
}
|
34
logging-modules/log4j2-programmatic-configuration/pom.xml
Normal file
34
logging-modules/log4j2-programmatic-configuration/pom.xml
Normal file
@ -0,0 +1,34 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>log4j2-programmatic-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
<packaging>pom</packaging>
|
||||
<modules>
|
||||
<module>simple-configuration</module>
|
||||
<module>set-configuration-factory</module>
|
||||
<module>simple-configurator</module>
|
||||
<module>simple-configuration-xml</module>
|
||||
<module>modify-xml-configuration</module>
|
||||
</modules>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.12</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-core</artifactId>
|
||||
<version>2.11.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.logging.log4j</groupId>
|
||||
<artifactId>log4j-slf4j-impl</artifactId>
|
||||
<version>2.11.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
@ -0,0 +1,10 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>log4j2-programmatic-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>set-configuration-factory</artifactId>
|
||||
</project>
|
@ -0,0 +1,88 @@
|
||||
/**
|
||||
This class demonstrates how to build the components of
|
||||
the configuration factory, as described in Section 3 of
|
||||
"Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
package com.baeldung.log4j2.config;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.core.Filter;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.config.Configuration;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationFactory;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationSource;
|
||||
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.LoggerComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
|
||||
|
||||
public class CustomConfigurationFactory extends ConfigurationFactory {
|
||||
|
||||
static Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) {
|
||||
AppenderComponentBuilder console = builder.newAppender("Stdout", "Console");
|
||||
LayoutComponentBuilder layout = builder.newLayout("PatternLayout")
|
||||
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable");
|
||||
console.add(layout);
|
||||
FilterComponentBuilder filter = builder.newFilter("MarkerFilter", Filter.Result.ACCEPT, Filter.Result.DENY);
|
||||
filter.addAttribute("marker", "FLOW");
|
||||
console.add(filter);
|
||||
builder.add(console);
|
||||
ComponentBuilder triggeringPolicies = builder.newComponent("Policies")
|
||||
.addComponent(builder.newComponent("CronTriggeringPolicy")
|
||||
.addAttribute("schedule", "0 0 0 * * ?"))
|
||||
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy")
|
||||
.addAttribute("size", "100M"));
|
||||
AppenderComponentBuilder rollingFile = builder.newAppender("rolling", "RollingFile");
|
||||
rollingFile.addAttribute("fileName", "target/rolling.log");
|
||||
rollingFile.addAttribute("filePattern", "target/archive/rolling-%d{MM-dd-yy}.log.gz");
|
||||
rollingFile.add(layout);
|
||||
rollingFile.addComponent(triggeringPolicies);
|
||||
builder.add(rollingFile);
|
||||
AppenderComponentBuilder file = builder.newAppender("FileSystem", "File");
|
||||
file.addAttribute("fileName", "target/logging.log");
|
||||
file.add(layout);
|
||||
builder.add(file);
|
||||
LoggerComponentBuilder logger = builder.newLogger("com", Level.DEBUG);
|
||||
logger.add(builder.newAppenderRef("Stdout"));
|
||||
logger.add(builder.newAppenderRef("rolling"));
|
||||
logger.add(builder.newAppenderRef("FileSystem"));
|
||||
logger.addAttribute("additivity", false);
|
||||
builder.add(logger);
|
||||
RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.ERROR);
|
||||
rootLogger.add(builder.newAppenderRef("Stdout"));
|
||||
rootLogger.add(builder.newAppenderRef("rolling"));
|
||||
rootLogger.add(builder.newAppenderRef("FileSystem"));
|
||||
rootLogger.addAttribute("additivity", false);
|
||||
builder.add(rootLogger);
|
||||
try {
|
||||
builder.writeXmlConfiguration(System.out);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) {
|
||||
ConfigurationBuilder<BuiltConfiguration> builder = newConfigurationBuilder();
|
||||
return createConfiguration(name, builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getSupportedTypes() {
|
||||
return new String[] { "*" };
|
||||
}
|
||||
|
||||
@Override
|
||||
public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
|
||||
return getConfiguration(loggerContext, source.toString(), null);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
/**
|
||||
This class invokes the configuration factory with static initialization,
|
||||
as defined in section 4.1 of the "Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
package com.baeldung.log4j2.logtest;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.Marker;
|
||||
import org.apache.logging.log4j.MarkerManager;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationFactory;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
import com.baeldung.log4j2.config.CustomConfigurationFactory;
|
||||
|
||||
@RunWith(JUnit4.class)
|
||||
public class LogTest {
|
||||
static {
|
||||
CustomConfigurationFactory customConfigurationFactory = new CustomConfigurationFactory();
|
||||
ConfigurationFactory.setConfigurationFactory(customConfigurationFactory);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void simpleProgrammaticConfiguration() {
|
||||
Logger logger = LogManager.getLogger();
|
||||
Marker markerContent = MarkerManager.getMarker("FLOW");
|
||||
logger.debug(markerContent, "Debug log message");
|
||||
logger.info(markerContent, "Info log message");
|
||||
logger.error(markerContent, "Error log message");
|
||||
}
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
<?xml version="1.0"?>
|
||||
<project
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
|
||||
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>log4j2-programmatic-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>simple-configuration-xml</artifactId>
|
||||
<name>simple-configuration-xml</name>
|
||||
<url>http://maven.apache.org</url>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
</properties>
|
||||
</project>
|
@ -0,0 +1,32 @@
|
||||
<?xml version="1.0" ?>
|
||||
<Configuration>
|
||||
<Appenders>
|
||||
<Console name="Stdout">
|
||||
<PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable" />
|
||||
<MarkerFilter onMatch="ACCEPT" onMismatch="DENY" marker="FLOW" />
|
||||
</Console>
|
||||
<RollingFile name="rolling" fileName="target/rolling.log"
|
||||
filePattern="target/archive/rolling-%d{MM-dd-yy}.log.gz">
|
||||
<PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable" />
|
||||
<Policies>
|
||||
<CronTriggeringPolicy schedule="0 0 0 * * ?" />
|
||||
<SizeBasedTriggeringPolicy size="100M" />
|
||||
</Policies>
|
||||
</RollingFile>
|
||||
<File name="FileSystem" fileName="target/logging.log">
|
||||
<PatternLayout pattern="%d [%t] %-5level: %msg%n%throwable" />
|
||||
</File>
|
||||
</Appenders>
|
||||
<Loggers>
|
||||
<Logger name="com" level="DEBUG" additivity="false">
|
||||
<AppenderRef ref="Stdout" />
|
||||
<AppenderRef ref="rolling" />
|
||||
<AppenderRef ref="FileSystem" />
|
||||
</Logger>
|
||||
<Root level="ERROR" additivity="false">
|
||||
<AppenderRef ref="Stdout" />
|
||||
<AppenderRef ref="rolling" />
|
||||
<AppenderRef ref="FileSystem" />
|
||||
</Root>
|
||||
</Loggers>
|
||||
</Configuration>
|
@ -0,0 +1,30 @@
|
||||
/**
|
||||
This class loads the logging configuration from the xml defined in
|
||||
src/main/resources and uses the same configuration generated through
|
||||
programmatic configuration as defined in simple-configuration example.
|
||||
**/
|
||||
|
||||
package com.baeldung.log4j2.logtest;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.Marker;
|
||||
import org.apache.logging.log4j.MarkerManager;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
|
||||
@RunWith(JUnit4.class)
|
||||
public class LogTest {
|
||||
|
||||
@Test
|
||||
public void simpleProgrammaticConfiguration(){
|
||||
Logger logger = LogManager.getLogger();
|
||||
Marker markerContent = MarkerManager.getMarker("FLOW");
|
||||
logger.debug(markerContent, "Debug log message");
|
||||
logger.info(markerContent, "Info log message");
|
||||
logger.error(markerContent, "Error log message");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>log4j2-programmatic-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>simple-configuration</artifactId>
|
||||
</project>
|
@ -0,0 +1,94 @@
|
||||
/**
|
||||
This class demonstrates how to build the components of
|
||||
the configuration factory, as described in Section 3 of
|
||||
"Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
|
||||
package com.baeldung.log4j2.config;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.core.Filter;
|
||||
import org.apache.logging.log4j.core.LoggerContext;
|
||||
import org.apache.logging.log4j.core.config.Configuration;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationFactory;
|
||||
import org.apache.logging.log4j.core.config.ConfigurationSource;
|
||||
import org.apache.logging.log4j.core.config.Order;
|
||||
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.ComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.FilterComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.LoggerComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.RootLoggerComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
|
||||
import org.apache.logging.log4j.core.config.plugins.Plugin;
|
||||
|
||||
@Plugin(name = "CustomConfigurationFactory", category = ConfigurationFactory.CATEGORY)
|
||||
@Order(50)
|
||||
public class CustomConfigurationFactory extends ConfigurationFactory {
|
||||
|
||||
static Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) {
|
||||
AppenderComponentBuilder console = builder.newAppender("Stdout", "Console");
|
||||
LayoutComponentBuilder layout = builder.newLayout("PatternLayout")
|
||||
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable");
|
||||
console.add(layout);
|
||||
FilterComponentBuilder filter = builder.newFilter("MarkerFilter", Filter.Result.ACCEPT, Filter.Result.DENY);
|
||||
filter.addAttribute("marker", "FLOW");
|
||||
console.add(filter);
|
||||
builder.add(console);
|
||||
ComponentBuilder triggeringPolicies = builder.newComponent("Policies")
|
||||
.addComponent(builder.newComponent("CronTriggeringPolicy")
|
||||
.addAttribute("schedule", "0 0 0 * * ?"))
|
||||
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy")
|
||||
.addAttribute("size", "100M"));
|
||||
AppenderComponentBuilder rollingFile = builder.newAppender("rolling", "RollingFile");
|
||||
rollingFile.addAttribute("fileName", "target/rolling.log");
|
||||
rollingFile.addAttribute("filePattern", "target/archive/rolling-%d{MM-dd-yy}.log.gz");
|
||||
rollingFile.add(layout);
|
||||
rollingFile.addComponent(triggeringPolicies);
|
||||
builder.add(rollingFile);
|
||||
AppenderComponentBuilder file = builder.newAppender("FileSystem", "File");
|
||||
file.addAttribute("fileName", "target/logging.log");
|
||||
file.add(layout);
|
||||
builder.add(file);
|
||||
LoggerComponentBuilder logger = builder.newLogger("com", Level.DEBUG);
|
||||
logger.add(builder.newAppenderRef("Stdout"));
|
||||
logger.add(builder.newAppenderRef("rolling"));
|
||||
logger.add(builder.newAppenderRef("FileSystem"));
|
||||
logger.addAttribute("additivity", false);
|
||||
builder.add(logger);
|
||||
RootLoggerComponentBuilder rootLogger = builder.newRootLogger(Level.ERROR);
|
||||
rootLogger.add(builder.newAppenderRef("Stdout"));
|
||||
rootLogger.add(builder.newAppenderRef("rolling"));
|
||||
// rootLogger.add(builder.newAppenderRef("syslogAppender"));
|
||||
rootLogger.add(builder.newAppenderRef("FileSystem"));
|
||||
rootLogger.addAttribute("additivity", false);
|
||||
builder.add(rootLogger);
|
||||
try {
|
||||
builder.writeXmlConfiguration(System.out);
|
||||
} catch (IOException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
return builder.build();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public Configuration getConfiguration(LoggerContext loggerContext, ConfigurationSource source) {
|
||||
return getConfiguration(loggerContext, source.toString(), null);
|
||||
}
|
||||
|
||||
public Configuration getConfiguration(final LoggerContext loggerContext, final String name, final URI configLocation) {
|
||||
ConfigurationBuilder<BuiltConfiguration> builder = newConfigurationBuilder();
|
||||
return createConfiguration(name, builder);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String[] getSupportedTypes() {
|
||||
return new String[] { "*" };
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
/**
|
||||
This class invokes the configuration factory through the run time property,
|
||||
as defined in section 4.2 of the "Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
package com.baeldung.log4j2.logtest;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
import org.apache.logging.log4j.Marker;
|
||||
import org.apache.logging.log4j.MarkerManager;
|
||||
import org.junit.Test;
|
||||
|
||||
public class LogTest {
|
||||
@Test
|
||||
public void simpleProgrammaticConfiguration() {
|
||||
Logger logger = LogManager.getLogger();
|
||||
Marker markerContent = MarkerManager.getMarker("FLOW");
|
||||
logger.debug(markerContent, "Debug log message");
|
||||
logger.info(markerContent, "Info log message");
|
||||
logger.error(markerContent, "Error log message");
|
||||
}
|
||||
}
|
@ -0,0 +1,10 @@
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<parent>
|
||||
<groupId>com.baeldung.log4j2</groupId>
|
||||
<artifactId>log4j2-programmatic-configuration</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<artifactId>simple-configurator</artifactId>
|
||||
</project>
|
@ -0,0 +1,40 @@
|
||||
/**
|
||||
This class demonstrates how to use ConfigurationBuilderFactory directly,
|
||||
as described in Section 3 of "Programmatic Configuration with Log4j 2"
|
||||
**/
|
||||
|
||||
package com.baeldung.log4j2.configure;
|
||||
|
||||
import org.apache.logging.log4j.Level;
|
||||
import org.apache.logging.log4j.core.appender.ConsoleAppender;
|
||||
import org.apache.logging.log4j.core.config.Configurator;
|
||||
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
|
||||
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
|
||||
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.JUnit4;
|
||||
|
||||
import com.baeldung.log4j2.logtest.LogPrinter;
|
||||
|
||||
@RunWith(JUnit4.class)
|
||||
public class LogTest {
|
||||
@Test
|
||||
public void simpleProgrammaticConfiguration() {
|
||||
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
|
||||
AppenderComponentBuilder console = builder.newAppender("Stdout", "CONSOLE")
|
||||
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
|
||||
console.add(builder.newLayout("PatternLayout")
|
||||
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
|
||||
builder.add(console);
|
||||
builder.add(builder.newLogger("com", Level.DEBUG)
|
||||
.add(builder.newAppenderRef("Stdout"))
|
||||
.addAttribute("additivity", false));
|
||||
builder.add(builder.newRootLogger(Level.ERROR)
|
||||
.add(builder.newAppenderRef("Stdout")));
|
||||
Configurator.initialize(builder.build());
|
||||
LogPrinter logPrinter = new LogPrinter();
|
||||
logPrinter.printlog();
|
||||
}
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
package com.baeldung.log4j2.logtest;
|
||||
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
|
||||
public class LogPrinter {
|
||||
private Logger logger = LogManager.getLogger();
|
||||
|
||||
public void printlog() {
|
||||
logger.debug("Debug log message");
|
||||
logger.info("Info log message");
|
||||
logger.error("Error log message");
|
||||
}
|
||||
}
|
1
pom.xml
1
pom.xml
@ -91,6 +91,7 @@
|
||||
<module>logging-modules/log-mdc</module>
|
||||
<module>logging-modules/log4j</module>
|
||||
<module>logging-modules/log4j2</module>
|
||||
<module>logging-modules/log4j2-programmatic-configuration</module>
|
||||
<module>logging-modules/logback</module>
|
||||
<module>lombok</module>
|
||||
<module>mapstruct</module>
|
||||
|
Loading…
x
Reference in New Issue
Block a user