parent
3cf4dc5a78
commit
d3597a84c7
|
@ -0,0 +1,4 @@
|
||||||
|
/target/
|
||||||
|
.settings/
|
||||||
|
.classpath
|
||||||
|
.project
|
|
@ -0,0 +1,3 @@
|
||||||
|
14:00:35.258 INFO Programmatic Logger Message
|
||||||
|
14:03:51.178 INFO Programmatic Logger Message
|
||||||
|
14:04:11.753 INFO Programmatic Logger Message
|
|
@ -0,0 +1,25 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"timeMillis" : 1496315051753,
|
||||||
|
"thread" : "main",
|
||||||
|
"level" : "INFO",
|
||||||
|
"loggerName" : "RollingFileLogger",
|
||||||
|
"message" : "Json Message 1",
|
||||||
|
"endOfBatch" : false,
|
||||||
|
"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
|
||||||
|
"threadId" : 1,
|
||||||
|
"threadPriority" : 5
|
||||||
|
}
|
||||||
|
, {
|
||||||
|
"timeMillis" : 1496315051862,
|
||||||
|
"thread" : "main",
|
||||||
|
"level" : "INFO",
|
||||||
|
"loggerName" : "RollingFileLogger",
|
||||||
|
"message" : "Json Messag 2",
|
||||||
|
"endOfBatch" : false,
|
||||||
|
"loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
|
||||||
|
"threadId" : 1,
|
||||||
|
"threadPriority" : 5
|
||||||
|
}
|
||||||
|
|
||||||
|
]
|
|
@ -0,0 +1,56 @@
|
||||||
|
<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>log4j2-example</groupId>
|
||||||
|
<artifactId>log4j2-example</artifactId>
|
||||||
|
<version>0.0.1-SNAPSHOT</version>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<!-- This is the needed core component. -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.logging.log4j</groupId>
|
||||||
|
<artifactId>log4j-core</artifactId>
|
||||||
|
<version>${log4j-core.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<!-- This is used by JSONLayout. -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
<version>${jackson.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>junit</groupId>
|
||||||
|
<artifactId>junit</artifactId>
|
||||||
|
<version>4.12</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources/</directory>
|
||||||
|
<excludes>
|
||||||
|
<exclude>**/*.java</exclude>
|
||||||
|
</excludes>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.5</version>
|
||||||
|
<configuration>
|
||||||
|
<source>1.8</source>
|
||||||
|
<target>1.8</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<jackson.version>2.8.8.1</jackson.version>
|
||||||
|
<log4j-core.version>2.8.2</log4j-core.version>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,43 @@
|
||||||
|
package com.stackify.models;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public class User {
|
||||||
|
private String name;
|
||||||
|
private String email;
|
||||||
|
private LocalDate dateOfBirth;
|
||||||
|
|
||||||
|
public User() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public User(String name, String email) {
|
||||||
|
super();
|
||||||
|
this.name = name;
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getEmail() {
|
||||||
|
return email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setEmail(String email) {
|
||||||
|
this.email = email;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getDateOfBirth() {
|
||||||
|
return dateOfBirth;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDateOfBirth(LocalDate dateOfBirth) {
|
||||||
|
this.dateOfBirth = dateOfBirth;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package com.stackify.services;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.Period;
|
||||||
|
|
||||||
|
import com.stackify.models.User;
|
||||||
|
|
||||||
|
public class MyService {
|
||||||
|
|
||||||
|
public int calculateUserAge(User user) {
|
||||||
|
return Period.between(user.getDateOfBirth(), LocalDate.now()).getYears();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Configuration status="WARN">
|
||||||
|
<CustomLevels>
|
||||||
|
<CustomLevel name="NEW_XML_LEVEL" intLevel="350" />
|
||||||
|
</CustomLevels>
|
||||||
|
<Filters>
|
||||||
|
<BurstFilter level="INFO" rate="10" maxBurst="100" />
|
||||||
|
</Filters>
|
||||||
|
<Appenders>
|
||||||
|
<Console name="ColoredConsole" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout
|
||||||
|
pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%level}{FATAL=bg_red, ERROR=red, WARN=yellow, INFO=green, DEBUG=blue, NEW_LEVEL=black, NEW_XML_LEVEL=black} - %msg%n" />
|
||||||
|
</Console>
|
||||||
|
<Console name="Console" target="SYSTEM_OUT">
|
||||||
|
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %level - %msg%n" />
|
||||||
|
</Console>
|
||||||
|
<RollingFile name="RollingFileAppender" fileName="logs/app.log"
|
||||||
|
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
|
||||||
|
<JSONLayout complete="true" compact="false" />
|
||||||
|
<Policies>
|
||||||
|
<OnStartupTriggeringPolicy />
|
||||||
|
<TimeBasedTriggeringPolicy />
|
||||||
|
<SizeBasedTriggeringPolicy size="50 MB" />
|
||||||
|
</Policies>
|
||||||
|
<DefaultRolloverStrategy max="20" />
|
||||||
|
</RollingFile>
|
||||||
|
<!--
|
||||||
|
<JDBC name="JDBCAppender" tableName="logs">
|
||||||
|
<DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
|
||||||
|
<Column name="date" isEventTimestamp="true" />
|
||||||
|
<Column name="logger" pattern="%logger" />
|
||||||
|
<Column name="level" pattern="%level" />
|
||||||
|
<Column name="message" pattern="%message" />
|
||||||
|
<Column name="exception" pattern="%ex{full}" />
|
||||||
|
</JDBC>
|
||||||
|
|
||||||
|
<Failover name="FailoverAppender" primary="JDBCAppender">
|
||||||
|
<Failovers>
|
||||||
|
<AppenderRef ref="RollingFileAppender" />
|
||||||
|
<AppenderRef ref="Console" />
|
||||||
|
</Failovers>
|
||||||
|
</Failover>
|
||||||
|
-->
|
||||||
|
</Appenders>
|
||||||
|
<Loggers>
|
||||||
|
<Root level="debug">
|
||||||
|
<AppenderRef ref="ColoredConsole" />
|
||||||
|
</Root>
|
||||||
|
<Logger name="ConsoleLogger">
|
||||||
|
<AppenderRef ref="Console" />
|
||||||
|
</Logger>
|
||||||
|
<Logger name="RollingFileLogger">
|
||||||
|
<AppenderRef ref="RollingFileAppender" />
|
||||||
|
</Logger>
|
||||||
|
<!--
|
||||||
|
<Logger name="JDBCLogger">
|
||||||
|
<AppenderRef ref="JDBCAppender" />
|
||||||
|
<RegexFilter regex="*jdbc*" onMatch="ACCEPT" onMismatch="DENY" />
|
||||||
|
</Logger>
|
||||||
|
-->
|
||||||
|
</Loggers>
|
||||||
|
</Configuration>
|
|
@ -0,0 +1,81 @@
|
||||||
|
package com.stackify.services;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.Month;
|
||||||
|
|
||||||
|
import org.apache.logging.log4j.Level;
|
||||||
|
import org.apache.logging.log4j.LogManager;
|
||||||
|
import org.apache.logging.log4j.Logger;
|
||||||
|
import org.apache.logging.log4j.core.Appender;
|
||||||
|
import org.apache.logging.log4j.core.LoggerContext;
|
||||||
|
import org.apache.logging.log4j.core.appender.FileAppender;
|
||||||
|
import org.apache.logging.log4j.core.config.AppenderRef;
|
||||||
|
import org.apache.logging.log4j.core.config.Configuration;
|
||||||
|
import org.apache.logging.log4j.core.config.LoggerConfig;
|
||||||
|
import org.apache.logging.log4j.core.layout.PatternLayout;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import com.stackify.models.User;
|
||||||
|
import com.stackify.services.MyService;
|
||||||
|
|
||||||
|
public class MyServiceTest {
|
||||||
|
|
||||||
|
private static final Logger logger = LogManager.getLogger(MyServiceTest.class);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testService() {
|
||||||
|
MyService myService = new MyService();
|
||||||
|
User user = new User("John", "john@yahoo.com");
|
||||||
|
user.setDateOfBirth(LocalDate.of(1980, Month.APRIL, 20));
|
||||||
|
logger.info("Age of user {} is {}", () -> user.getName(), () -> myService.calculateUserAge(user));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testColoredLogger() {
|
||||||
|
logger.fatal("Fatal level message");
|
||||||
|
logger.error("Error level message");
|
||||||
|
logger.warn("Warn level message");
|
||||||
|
logger.info("Info level message");
|
||||||
|
logger.debug("Debug level message");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRollingFileAppender() {
|
||||||
|
Logger rfLogger = LogManager.getLogger("RollingFileLogger");
|
||||||
|
rfLogger.info("Json Message 1");
|
||||||
|
rfLogger.info("Json Message 2");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testProgrammaticConfig() {
|
||||||
|
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
|
||||||
|
Configuration config = ctx.getConfiguration();
|
||||||
|
|
||||||
|
PatternLayout layout = PatternLayout.newBuilder().withConfiguration(config).withPattern("%d{HH:mm:ss.SSS} %level %msg%n").build();
|
||||||
|
|
||||||
|
Appender appender = FileAppender.newBuilder().setConfiguration(config).withName("programmaticFileAppender").withLayout(layout).withFileName("java.log").build();
|
||||||
|
appender.start();
|
||||||
|
config.addAppender(appender);
|
||||||
|
AppenderRef ref = AppenderRef.createAppenderRef("programmaticFileAppender", null, null);
|
||||||
|
AppenderRef[] refs = new AppenderRef[] { ref };
|
||||||
|
|
||||||
|
LoggerConfig loggerConfig = LoggerConfig.createLogger(false, Level.INFO, "programmaticLogger", "true", refs, null, config, null);
|
||||||
|
|
||||||
|
loggerConfig.addAppender(appender, null, null);
|
||||||
|
config.addLogger("programmaticLogger", loggerConfig);
|
||||||
|
ctx.updateLoggers();
|
||||||
|
|
||||||
|
Logger pLogger = LogManager.getLogger("programmaticLogger");
|
||||||
|
pLogger.info("Programmatic Logger Message");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testCustomLevel() {
|
||||||
|
Level myLevel = Level.forName("NEW_LEVEL", 350);
|
||||||
|
logger.log(myLevel, "Custom Level Message");
|
||||||
|
|
||||||
|
logger.log(Level.getLevel("NEW_XML_LEVEL"), "Custom XML Level Message");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue