diff --git a/pom.xml b/pom.xml
index fcc200b12d3b2970b2df46c11344fc971d223cfb..415536549ac6f471099e0b7eb5bd3ebbe0c0d2dd 100644
--- a/pom.xml
+++ b/pom.xml
@@ -196,6 +196,9 @@
                             <skipRuntimeScope>true</skipRuntimeScope>
                             <!-- Disable .Net Assembly Analyzer -->
                             <assemblyAnalyzerEnabled>false</assemblyAnalyzerEnabled>
+                            <!-- Disable checking npm dev dependencies -->
+                            <nodeAnalyzerEnabled>false</nodeAnalyzerEnabled>
+                            <nodeAuditSkipDevDependencies>true</nodeAuditSkipDevDependencies>
                         </configuration>
                         <executions>
                             <execution>
diff --git a/smp-parent-pom/pom.xml b/smp-parent-pom/pom.xml
index 74b0eb7ed54945093f5660a126f65c432356f85a..7a7d31293a14b73e731342f12a9f3a6d8085f136 100644
--- a/smp-parent-pom/pom.xml
+++ b/smp-parent-pom/pom.xml
@@ -93,6 +93,7 @@
         <xmlunit.version>2.5.1</xmlunit.version>
         <hamcrest.version>2.0.0.0</hamcrest.version>
         <jackson.version>2.13.0</jackson.version>
+        <logback.version>1.2.6</logback.version>
 
         <!-- jacoco, sonar code coverage settings start -->
         <sonar.java.coveragePlugin>jacoco</sonar.java.coveragePlugin>
@@ -380,9 +381,9 @@
                 <version>${guava.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-log4j12</artifactId>
-                <version>${slf4j.version}</version>
+                <groupId>ch.qos.logback</groupId>
+                <artifactId>logback-classic</artifactId>
+                <version>${logback.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.slf4j</groupId>
diff --git a/smp-server-library/pom.xml b/smp-server-library/pom.xml
index 75b0dc1f7655e23af68809bccb29474f1369714b..4489742cc1cfb645e3b5c6c8d671a3f85f993b29 100644
--- a/smp-server-library/pom.xml
+++ b/smp-server-library/pom.xml
@@ -63,8 +63,8 @@
             <artifactId>slf4j-ext</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.slf4j</groupId>
-            <artifactId>slf4j-log4j12</artifactId>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.security</groupId>
diff --git a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/FileProperty.java b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/FileProperty.java
index 50c0db98bb2edeef20694b60b94447fe8c6c617c..03bd157c7a8e623dce8171839dc0e4e8c084722e 100644
--- a/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/FileProperty.java
+++ b/smp-server-library/src/main/java/eu/europa/ec/edelivery/smp/config/FileProperty.java
@@ -1,11 +1,13 @@
 package eu.europa.ec.edelivery.smp.config;
 
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.joran.JoranConfigurator;
+import ch.qos.logback.core.joran.spi.JoranException;
 import eu.europa.ec.edelivery.smp.exceptions.SMPRuntimeException;
 import eu.europa.ec.edelivery.smp.logging.SMPLogger;
 import eu.europa.ec.edelivery.smp.logging.SMPLoggerFactory;
 import org.apache.commons.lang3.StringUtils;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.PropertyConfigurator;
+import org.slf4j.LoggerFactory;
 
 import java.io.File;
 import java.io.FileInputStream;
@@ -32,39 +34,33 @@ public class FileProperty {
     }
 
     public static void updateLog4jConfiguration(String logFileFolder, String logPropertyFile, String configurationFolder) {
-        Properties props = new Properties();
-        try {
-            InputStream configStream = null;
-            if (!StringUtils.isBlank(logPropertyFile)) {
-                File f = new File(logPropertyFile);
-                if (!f.exists()) {
-                    LOG.info("Log configuration file:  {} not exists.", f.getAbsolutePath());
-                    f = new File(configurationFolder, logPropertyFile);
-                    LOG.info("Set log configuration file: {}.", f.getAbsolutePath());
-                }
 
-                if (f.exists()) {
-                    LOG.info("Set log configuration: {}.",f.getAbsolutePath());
-                    configStream = new FileInputStream(f);
-                }
-            }
-            // if null use default properties
-            if (configStream == null) {
-                LOG.info("Set default log configuration.");
-                configStream = FileProperty.class.getResourceAsStream("/smp-log4j.properties");
-            }
-            props.load(configStream);
-            configStream.close();
-        } catch (IOException e) {
-            LOG.info("Error occurred while loading default LOG configuration.", e);
+        if (StringUtils.isNotBlank(logFileFolder)) {
+            System.setProperty(PROPERTY_LOG_FOLDER, logFileFolder);
+        }
+
+        File f = new File(logPropertyFile);
+        if (!f.exists()) {
+            LOG.info("Log configuration file: {} not exists.", f.getAbsolutePath());
+            f = new File(configurationFolder, logPropertyFile);
+            LOG.info("Set log configuration file: {}.", f.getAbsolutePath());
+
+        }
+        // if configuration file exist update configuration
+        if (f.exists()) {
+            setLogConfiguration(f);
         }
-        // set
-        if (!StringUtils.isBlank(logFileFolder)) {
-            LOG.info("Set log4j.appender.MainLogFile.File:{}. ",  logFileFolder + "/edelivery-smp.log");
-            props.setProperty("log4j.appender.MainLogFile.File {}", logFileFolder + "/edelivery-smp.log");
+    }
+
+    public static void setLogConfiguration(File configurationFile) {
+        try (InputStream configStream = new FileInputStream(configurationFile)) {
+            LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
+            JoranConfigurator configurator = new JoranConfigurator();
+            configurator.setContext(context);
+            configurator.doConfigure(configStream); // loads logback file
+        } catch (IOException | JoranException e) {
+            LOG.info("Error occurred while loading LOG configuration.", e);
         }
-        LogManager.resetConfiguration();
-        PropertyConfigurator.configure(props);
     }
 
     public static Properties getFileProperties() {
diff --git a/smp-server-library/src/main/resources/logback.xml b/smp-server-library/src/main/resources/logback.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10dd2cf59904b282efdc42c1ed8cd220c06f6e6d
--- /dev/null
+++ b/smp-server-library/src/main/resources/logback.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+    <!-- pattern definition -->
+    <property name="encoderPattern" value="%d{ISO8601} [%X{d_user}] [%X{d_domain}] [%X{d_messageId}] [%thread] %5p %c{1}:%L - %m%n" scope="global"/>
+    <property name="consolePattern" value="%d{ISO8601} [%X{d_user}] [%X{d_domain}] [%X{d_messageId}] [%thread] %5p %c{1}:%L - %m%n" scope="global"/>
+
+     <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.folder:-logs}/edelivery-smp.log</file>
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>SECURITY</marker>
+                <marker>BUSINESS</marker>
+            </evaluator>
+            <onMismatch>NEUTRAL</onMismatch>
+            <onMatch>DENY</onMatch>
+        </filter>
+        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
+            <!-- rollover daily -->
+            <fileNamePattern>${log.folder:-logs}/edelivery-smp-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
+            <!-- each file should be at most 30MB, keep 60 days worth of history, but at most 20GB -->
+            <maxFileSize>30MB</maxFileSize>
+            <maxHistory>60</maxHistory>
+            <totalSizeCap>20GB</totalSizeCap>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${encoderPattern}</pattern>
+        </encoder>
+    </appender>
+
+
+
+    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
+        <Target>System.out</Target>
+        <encoder>
+            <pattern>${consolePattern}</pattern>
+        </encoder>
+    </appender>
+
+    <logger name="eu.europa.ec.edelivery.smp" level="INFO" />
+    <root level="WARN">
+        <appender-ref ref="file"/>
+        <appender-ref ref="stdout"/>
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/smp-server-library/src/main/resources/smp-log4j.properties b/smp-server-library/src/main/resources/smp-log4j.properties
deleted file mode 100644
index dda52be7b4fd19bc1260e14e82000d1899954e05..0000000000000000000000000000000000000000
--- a/smp-server-library/src/main/resources/smp-log4j.properties
+++ /dev/null
@@ -1,17 +0,0 @@
-log4j.rootLogger = INFO, MainLogFile, console
-
-log4j.logger.eu.europa.ec.edelivery.smp = INFO
-log4j.additivity.eu.europa.ec.edelivery.smp = true
-
-
-log4j.appender.console = org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout = org.apache.log4j.EnhancedPatternLayout
-log4j.appender.console.layout.ConversionPattern = %d{ISO8601}{Europe/Brussels} [%X{user}] [%X{requestId}] %-5p %c{1}:%L - %m%n
-
-
-log4j.appender.MainLogFile = org.apache.log4j.DailyRollingFileAppender
-log4j.appender.MainLogFile.DatePattern = '.'yyyy-MM-dd
-log4j.appender.MainLogFile.File = ./logs/edelivery-smp.log
-log4j.appender.MainLogFile.append = true
-log4j.appender.MainLogFile.layout = org.apache.log4j.EnhancedPatternLayout
-log4j.appender.MainLogFile.layout.ConversionPattern = %d{ISO8601}{Europe/Brussels} [%X{user}] [%X{requestId}] %-5p %c{1}:%L - %m%n
diff --git a/smp-webapp/src/main/resources/log4j.properties b/smp-webapp/src/main/resources/log4j.properties
deleted file mode 100644
index b760424a8f00935e80cb9e305497b0766223dfb7..0000000000000000000000000000000000000000
--- a/smp-webapp/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright 2017 European Commission | CEF eDelivery
-#
-# Licensed under the EUPL, Version 1.2 or - as soon they will be approved by the European Commission - subsequent versions of the EUPL (the "Licence");
-# You may not use this work except in compliance with the Licence.
-#
-# You may obtain a copy of the Licence attached in file: LICENCE-EUPL-v1.2.pdf
-#
-# Unless required by applicable law or agreed to in writing, software distributed under the Licence is distributed on an "AS IS" basis,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the Licence for the specific language governing permissions and limitations under the Licence.
-#
-
-log4j.rootLogger=INFO, stdout, logfile
-
-# A1 is set to be a ConsoleAppender.
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d [%p] %c %x - %m%n
-
-# log4j.logger.org.springframework=DEBUG
-
-# Second appender to write to a logfile
-log4j.appender.logfile=org.apache.log4j.RollingFileAppender
-log4j.appender.logfile.File=logs/edelivery-smp.log
-log4j.appender.logfile.MaxFileSize=5MB
-# Keep three backup files.
-log4j.appender.logfile.MaxBackupIndex=3
-# Pattern to output: date priority [category] - message
-log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
-log4j.appender.logfile.layout.ConversionPattern=%d{ISO8601} %p %c - %m%n
-