diff --git a/guest/logback-example/pom.xml b/guest/logback-example/pom.xml
new file mode 100644
index 0000000000..9d88c94197
--- /dev/null
+++ b/guest/logback-example/pom.xml
@@ -0,0 +1,41 @@
+
+ 4.0.0
+ com.stackify
+ logback-example
+ 0.0.1-SNAPSHOT
+
+
+
+ ch.qos.logback
+ logback-classic
+ 1.2.3
+
+
+
+ junit
+ junit
+ 4.12
+
+
+
+ org.codehaus.janino
+ janino
+ 3.0.7
+
+
+
+
+
+
+
+ maven-compiler-plugin
+ 3.5
+
+ 1.8
+ 1.8
+
+
+
+
+
\ No newline at end of file
diff --git a/guest/logback-example/src/main/java/com/stackify/logging/IgnoreLoggerFilter.java b/guest/logback-example/src/main/java/com/stackify/logging/IgnoreLoggerFilter.java
new file mode 100644
index 0000000000..c0eb414588
--- /dev/null
+++ b/guest/logback-example/src/main/java/com/stackify/logging/IgnoreLoggerFilter.java
@@ -0,0 +1,28 @@
+package com.stackify.logging;
+
+import org.slf4j.Marker;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.turbo.TurboFilter;
+import ch.qos.logback.core.spi.FilterReply;
+
+public class IgnoreLoggerFilter extends TurboFilter {
+
+ private String loggerName;
+
+ @Override
+ public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
+ if (loggerName == null) {
+ return FilterReply.NEUTRAL;
+ } else if (loggerName.equals(logger.getName())) {
+ return FilterReply.DENY;
+ } else
+ return FilterReply.NEUTRAL;
+ }
+
+ public void setLoggerName(String loggerName) {
+ this.loggerName = loggerName;
+ }
+
+}
diff --git a/guest/logback-example/src/main/java/com/stackify/models/Employee.java b/guest/logback-example/src/main/java/com/stackify/models/Employee.java
new file mode 100644
index 0000000000..1d040b372b
--- /dev/null
+++ b/guest/logback-example/src/main/java/com/stackify/models/Employee.java
@@ -0,0 +1,43 @@
+package com.stackify.models;
+
+public class Employee {
+
+ private String email;
+ private String name;
+
+ private double salary;
+
+ public Employee() {
+ }
+
+ public Employee(String email, String name, double salary) {
+ this.email = email;
+ this.name = name;
+ this.salary = salary;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getSalary() {
+ return salary;
+ }
+
+ public void setSalary(double salary) {
+ this.salary = salary;
+ }
+
+}
diff --git a/guest/logback-example/src/main/java/com/stackify/services/EmployeeService.java b/guest/logback-example/src/main/java/com/stackify/services/EmployeeService.java
new file mode 100644
index 0000000000..1795101f40
--- /dev/null
+++ b/guest/logback-example/src/main/java/com/stackify/services/EmployeeService.java
@@ -0,0 +1,11 @@
+package com.stackify.services;
+
+import com.stackify.models.Employee;
+
+public class EmployeeService {
+
+ public double calculateBonus(Employee user) {
+ return 0.1 * user.getSalary();
+ }
+
+}
diff --git a/guest/logback-example/src/main/resources/application.properties b/guest/logback-example/src/main/resources/application.properties
new file mode 100644
index 0000000000..601f964ff3
--- /dev/null
+++ b/guest/logback-example/src/main/resources/application.properties
@@ -0,0 +1 @@
+env=dev
\ No newline at end of file
diff --git a/guest/logback-example/src/main/resources/logback.xml b/guest/logback-example/src/main/resources/logback.xml
new file mode 100644
index 0000000000..d8ec24c7c3
--- /dev/null
+++ b/guest/logback-example/src/main/resources/logback.xml
@@ -0,0 +1,151 @@
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+ System.out
+
+
+
+
+
+
+
+
+ log-%d{yyyy-MM-dd}.log
+ 30
+ 3GB
+
+
+ 3MB
+
+
+ %d [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+ userRole
+ ANONYMOUS
+
+
+
+ ${userRole}.log
+
+ %d [%thread] %level %mdc %logger{50} - %msg%n
+
+
+
+
+
+
+
+
+ %d %green([%thread]) %highlight(%level) %logger{50} - %msg%n
+
+
+
+
+
+
+ %thread%level%logger%msg
+
+
+ log.html
+
+
+
+
+
+ ERROR
+ ACCEPT
+ DENY
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+ System.err
+
+
+
+
+ WARN
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+
+ return (level > DEBUG && message.toLowerCase().contains("employee"));
+
+ DENY
+ NEUTRAL
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
+
+
+
+
+
+ 2
+
+
+
+ ignoredColorLogger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/guest/logback-example/src/test/java/com/stackify/services/EmployeeServiceTest.java b/guest/logback-example/src/test/java/com/stackify/services/EmployeeServiceTest.java
new file mode 100644
index 0000000000..187b27e1df
--- /dev/null
+++ b/guest/logback-example/src/test/java/com/stackify/services/EmployeeServiceTest.java
@@ -0,0 +1,74 @@
+package com.stackify.services;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+
+import com.stackify.models.Employee;
+
+import ch.qos.logback.classic.Level;
+
+public class EmployeeServiceTest {
+ private static final Logger logger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME);
+
+ private EmployeeService employeeService = new EmployeeService();
+
+ @Test
+ public void testAppenders() {
+ Logger rollingFileLogger = LoggerFactory.getLogger("rollingFileLogger");
+ rollingFileLogger.info("Testing rolling file logger");
+
+ MDC.put("userRole", "ADMIN");
+ Logger siftingLogger = LoggerFactory.getLogger("roleSiftingLogger");
+ siftingLogger.info("Admin Action");
+ }
+
+ @Test
+ public void testLayouts() {
+ Logger htmlLogger = LoggerFactory.getLogger("htmlLogger");
+ htmlLogger.error("Employee Information Update Failed");
+ htmlLogger.info("New Account Created");
+
+ Logger colorLogger = LoggerFactory.getLogger("colorLogger");
+ colorLogger.error("Employee Information Update Failed");
+ colorLogger.info("New Account Created");
+ }
+
+ @Test
+ public void testLogLevel() {
+ ch.qos.logback.classic.Logger rollingFileLogger = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("rollingFileLogger");
+ rollingFileLogger.setLevel(Level.DEBUG);
+ rollingFileLogger.debug("Testing Log Level");
+ }
+
+ @Test
+ public void testParameter() {
+ Employee employee = new Employee("john@gmail.com", "John", 2000);
+ if (logger.isDebugEnabled()) {
+ logger.debug("The bonus for employee: " + employee.getName() + " is " + employeeService.calculateBonus(employee));
+ }
+ logger.debug("The bonus for employee {} is {}", employee.getName(), employeeService.calculateBonus(employee));
+ }
+
+ @Test
+ public void testFilters() {
+ Logger levelFilterLogger = LoggerFactory.getLogger("levelFilterLogger");
+ levelFilterLogger.error("Employee Information Update Failed");
+ Logger thresholdFilterLogger = LoggerFactory.getLogger("thresholdFilterLogger");
+ thresholdFilterLogger.trace("Employee record inserted");
+ Logger evaluatorFilterLogger = LoggerFactory.getLogger("evaluatorFilterLogger");
+ evaluatorFilterLogger.debug("Employee account deactivated");
+ }
+
+ @Test
+ public void testIgnoredLogger() {
+ Logger colorLogger = LoggerFactory.getLogger("ignoredColorLogger");
+ colorLogger.info("Ignored Log Message");
+ }
+
+ @Test
+ public void testConditionalConfiguration() {
+ logger.trace("Employee record updated");
+ }
+}