diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml
new file mode 100644
index 0000000..e1e5c12
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml
@@ -0,0 +1,51 @@
+<?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>
+    <artifactId>openecomp-sdc-logging-api</artifactId>
+    <name>openecomp-sdc-logging-api</name>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-logging-lib</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>${aspectj.version}</version>
+        </dependency>
+    </dependencies>
+
+    <!--dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+    </dependencies-->
+
+    
+</project>
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup
new file mode 100644
index 0000000..a2786b2
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/pom.xml.versionsBackup
@@ -0,0 +1,57 @@
+<?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>
+    <dependencies>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.aspectj</groupId>
+            <artifactId>aspectjrt</artifactId>
+            <version>1.8.9</version>
+        </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+        </dependency>
+    </dependencies>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-logging-lib</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+
+    <artifactId>openecomp-sdc-logging-api</artifactId>
+    <name>openecomp-sdc-logging-api</name>
+    <version>1.0-SNAPSHOT</version>
+
+    <!--dependencies>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-core</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-beans</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+    </dependencies-->
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/BaseFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/BaseFactory.java
new file mode 100644
index 0000000..3be67df
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/BaseFactory.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api;
+
+import java.util.Iterator;
+import java.util.ServiceLoader;
+
+/**
+ * Contains common functionality for factories used in the logging framework.
+ *
+ * <p>In order to use the factory, a particular (e.g. framework-specific) implementation of a service must be
+ * configured as described in
+ * <a href="http://docs.oracle.com/javase/8/docs/api/java/util/ServiceLoader.html">java.util.ServiceLoader</a>).</p>
+ *
+ * @author evitaliy
+ * @since 13/09/2016.
+ *
+ * @see ServiceLoader
+ */
+public class BaseFactory {
+
+    protected static <T> T locateService(Class<T> clazz) throws Exception {
+
+        T service;
+        ServiceLoader<T> loader = ServiceLoader.load(clazz);
+        Iterator<T> iterator = loader.iterator();
+        if (iterator.hasNext()) {
+
+            service = iterator.next();
+            if (iterator.hasNext()) {
+                System.err.println(String.format("Warning! Configured more than one implementation of %s",
+                        clazz.getName()));
+            }
+
+            return service;
+        }
+
+        throw new IllegalArgumentException((String.format("No implementations configured for %s", clazz.getName())));
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/Logger.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/Logger.java
new file mode 100644
index 0000000..9055e64
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/Logger.java
@@ -0,0 +1,107 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api;
+
+/**
+ * <p>This interface defines logging as specified by Open OPENECOMP logging requirements.</p>
+ *
+ * <p>Formatted messages must follow the <a href="http://www.slf4j.org/api/org/slf4j/helpers/MessageFormatter.html>SLF4J
+ * format</a>.</p>
+ *
+ * @author evitaliy
+ * @since 13/09/2016.
+ */
+public interface Logger {
+
+    String getName();
+
+    boolean isMetricsEnabled();
+
+    void metrics(String msg);
+
+    void metrics(String msg, Object arg);
+
+    void metrics(String msg, Object arg1, Object arg2);
+
+    void metrics(String msg, Object... arguments);
+
+    void metrics(String msg, Throwable t);
+
+    boolean isAuditEnabled();
+
+    void audit(String msg);
+
+    void audit(String msg, Object arg);
+
+    void audit(String msg, Object arg1, Object arg2);
+
+    void audit(String msg, Object... arguments);
+
+    void audit(String msg, Throwable t);
+
+    boolean isDebugEnabled();
+
+    void debug(String msg);
+
+    void debug(String msg, Object arg);
+
+    void debug(String msg, Object arg1, Object arg2);
+
+    void debug(String msg, Object... arguments);
+
+    void debug(String msg, Throwable t);
+
+    boolean isInfoEnabled();
+
+    void info(String msg);
+
+    void info(String msg, Object arg);
+
+    void info(String msg, Object arg1, Object arg2);
+
+    void info(String msg, Object... arguments);
+
+    void info(String msg, Throwable t);
+
+    boolean isWarnEnabled();
+
+    void warn(String msg);
+
+    void warn(String msg, Object arg);
+
+    void warn(String msg, Object... arguments);
+
+    void warn(String msg, Object arg1, Object arg2);
+
+    void warn(String msg, Throwable t);
+
+    boolean isErrorEnabled();
+
+    void error(String msg);
+
+    void error(String msg, Object arg);
+
+    void error(String msg, Object arg1, Object arg2);
+
+    void error(String msg, Object... arguments);
+
+    void error(String msg, Throwable t);
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerCreationService.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerCreationService.java
new file mode 100644
index 0000000..fbad636
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerCreationService.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api;
+
+/**
+ *
+ * Implements a framework-specific logging, to be used by {@link LoggerFactory}.
+ *
+ * @author evitaliy
+ * @since 13/09/2016.
+ */
+public interface LoggerCreationService {
+
+    Logger getLogger(String className);
+
+    Logger getLogger(Class<?> clazz);
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java
new file mode 100644
index 0000000..7029ded
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/LoggerFactory.java
@@ -0,0 +1,207 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api;
+
+
+/**
+ * <a>Factory to hide a concrete, framework-specific implementation of logger creation.</a>
+ *
+ * <p>The service used by this factory must implement {@link LoggerCreationService}. If no implementation has been
+ * configured or could not be instantiated, a <b>no-op logger</b> will be used, and <b>no events</b> will be logged.
+ * This is done to prevent recursion if attempts are being made to log exceptions that resulted from logger
+ * initialization.
+ * </p>
+ *
+ * @author evitaliy
+ * @since 13/09/2016.
+ *
+ * @see BaseFactory
+ * @see LoggerCreationService
+ */
+@SuppressWarnings("ThrowableInstanceNeverThrown")
+public class LoggerFactory extends BaseFactory {
+
+    private static final LoggerCreationService SERVICE;
+
+    static {
+        LoggerCreationService service;
+
+        try {
+            service = locateService(LoggerCreationService.class);
+        } catch (Throwable e) {
+            new RuntimeException("Failed to instantiate logger factory", e).printStackTrace();
+            // use the no-op service to prevent recursion in case of an attempt to log an exception as a
+            // result of a logger initialization error
+            service = new NoOpLoggerCreationService();
+        }
+
+        SERVICE = service;
+    }
+
+    public static Logger getLogger(String clazzName) {
+        return SERVICE.getLogger(clazzName);
+    }
+
+    public static Logger getLogger(Class<?> clazz) {
+        return SERVICE.getLogger(clazz);
+    }
+
+    private static class NoOpLoggerCreationService implements LoggerCreationService {
+        
+        private static final Logger NO_OP_LOGGER = new Logger() {
+            
+            @Override
+            public String getName() {
+                return "No-Op Logger";
+            }
+
+            @Override
+            public boolean isMetricsEnabled() {
+                return false;
+            }
+
+            @Override
+            public void metrics(String msg) { }
+
+            @Override
+            public void metrics(String msg, Object arg) { }
+
+            @Override
+            public void metrics(String msg, Object arg1, Object arg2) { }
+
+            @Override
+            public void metrics(String msg, Object... arguments) { }
+
+            @Override
+            public void metrics(String msg, Throwable t) { }
+
+            @Override
+            public boolean isAuditEnabled() {
+                return false;
+            }
+
+            @Override
+            public void audit(String msg) { }
+
+            @Override
+            public void audit(String msg, Object arg) { }
+
+            @Override
+            public void audit(String msg, Object arg1, Object arg2) { }
+
+            @Override
+            public void audit(String msg, Object... arguments) { }
+
+            @Override
+            public void audit(String msg, Throwable t) { }
+
+            @Override
+            public boolean isDebugEnabled() {
+                return false;
+            }
+
+            @Override
+            public void debug(String msg) { }
+
+            @Override
+            public void debug(String msg, Object arg) { }
+
+            @Override
+            public void debug(String msg, Object arg1, Object arg2) { }
+
+            @Override
+            public void debug(String msg, Object... arguments) { }
+
+            @Override
+            public void debug(String msg, Throwable t) { }
+
+            @Override
+            public boolean isInfoEnabled() {
+                return false;
+            }
+
+            @Override
+            public void info(String msg) { }
+
+            @Override
+            public void info(String msg, Object arg) { }
+
+            @Override
+            public void info(String msg, Object arg1, Object arg2) { }
+
+            @Override
+            public void info(String msg, Object... arguments) { }
+
+            @Override
+            public void info(String msg, Throwable t) { }
+
+            @Override
+            public boolean isWarnEnabled() {
+                return false;
+            }
+
+            @Override
+            public void warn(String msg) { }
+
+            @Override
+            public void warn(String msg, Object arg) { }
+
+            @Override
+            public void warn(String msg, Object... arguments) { }
+
+            @Override
+            public void warn(String msg, Object arg1, Object arg2) { }
+
+            @Override
+            public void warn(String msg, Throwable t) { }
+
+            @Override
+            public boolean isErrorEnabled() {
+                return false;
+            }
+
+            @Override
+            public void error(String msg) { }
+
+            @Override
+            public void error(String msg, Object arg) { }
+
+            @Override
+            public void error(String msg, Object arg1, Object arg2) { }
+
+            @Override
+            public void error(String msg, Object... arguments) { }
+
+            @Override
+            public void error(String msg, Throwable t) { }
+        };
+        
+        @Override
+        public Logger getLogger(String className) {
+            return NO_OP_LOGGER;
+        }
+
+        @Override
+        public Logger getLogger(Class<?> clazz) {
+            return NO_OP_LOGGER;
+        }
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/annotations/Debug.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/annotations/Debug.java
new file mode 100644
index 0000000..b00b85a
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/annotations/Debug.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api.annotations;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Created by TALIO on 12/26/2016.
+ */
+
+public @interface Debug {
+
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/annotations/Metrics.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/annotations/Metrics.java
new file mode 100644
index 0000000..2bcad91
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/annotations/Metrics.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api.annotations;
+
+/**
+ * Indicates a method whose execution time should be measured and logged as required for Open OPENECOMP metrics.
+ *
+ * @author evitaliy
+ * @since 27/07/2016.
+ */
+
+public @interface Metrics {
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/ContextPropagationService.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/ContextPropagationService.java
new file mode 100644
index 0000000..98200da
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/ContextPropagationService.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api.context;
+
+/**
+ * Should be used to implement a framework-specific mechanism of propagation of a diagnostic context to child threads.
+ *
+ * @author evitaliy
+ * @since 12/09/2016.
+ */
+public interface ContextPropagationService {
+
+    Runnable create(Runnable task);
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java
new file mode 100644
index 0000000..3ad999f
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/api/context/TaskFactory.java
@@ -0,0 +1,79 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.api.context;
+
+import org.openecomp.sdc.logging.api.BaseFactory;
+
+/**
+ * <p>Should be used to propagate a diagnostic context (for instance
+ * <a href="http://www.slf4j.org/manual.html#mdc">MDC</a>) to other threads.</p>
+ *
+ * <p>Applicable when creating a child thread directly, or submitting tasks for potentially postponed execution via
+ * an <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html">Executor</a> (including
+ * any of the <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html">executor
+ * services</a> and
+ * <a href="http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ForkJoinPool.html">ForkJoinPool</a>).</p>
+ *
+ * <p>The service used by this factory must implement {@link ContextPropagationService}.</p>
+ *
+ * @author evitaliy
+ * @since 12/09/2016.
+ *
+ * @see ContextPropagationService
+ */
+@SuppressWarnings("ThrowableInstanceNeverThrown")
+public class TaskFactory extends BaseFactory {
+
+    private static final ContextPropagationService SERVICE;
+    private static final RuntimeException ERROR;
+
+    static {
+
+        ContextPropagationService service = null;
+        RuntimeException error = null;
+
+        try {
+            service = locateService(ContextPropagationService.class);
+        } catch (Throwable e) {
+            error = new RuntimeException("Failed to instantiate task factory", e);
+        }
+
+        SERVICE = service;
+        ERROR = error;
+    }
+
+    /**
+     * Modify a task so that a diagnostic context is propagated to the thread when the task runs. Done in a
+     * logging-framework specific way.
+     *
+     * @param task any Runnable that will run in a thread
+     * @return modified (wrapped) original task that runs the same business logic, but also takes care of copying the
+     *         diagnostic context for logging
+     */
+    public static Runnable create(Runnable task) {
+
+        if (SERVICE == null) {
+            throw ERROR;
+        }
+
+        return SERVICE.create(task);
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/context/MdcData.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/context/MdcData.java
new file mode 100644
index 0000000..a6a673d
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/context/MdcData.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.context;
+
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.slf4j.MDC;
+
+
+public abstract class MdcData {
+  private String level;
+  private String errorCode;
+
+  MdcData() {
+  }
+
+  public MdcData(String level, String errorCode) {
+    this.level = level;
+    this.errorCode = errorCode;
+  }
+
+  public void setMdcValues() {
+    MDC.put(LoggerConstants.ERROR_CATEGORY, this.level);
+    MDC.put(LoggerConstants.ERROR_CODE, this.errorCode);
+  }
+
+  public String getLevel() {
+    return level;
+  }
+
+  public void setLevel(String level) {
+    this.level = level;
+  }
+
+  public String getErrorCode() {
+    return errorCode;
+  }
+
+  public void setErrorCode(String errorCode) {
+    this.errorCode = errorCode;
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java
new file mode 100644
index 0000000..028a1bc
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/AuditMessages.java
@@ -0,0 +1,28 @@
+package org.openecomp.sdc.logging.messages;
+
+/**
+ * Created by ayalaben on 4/20/2017.
+ */
+public class AuditMessages {
+
+    public static final String AUDIT_MSG = " --Audit-- ";
+
+    public static final String CREATE_VLM = "Create VLM. VLM Name: ";
+    public static final String CHECK_IN_VLM = "Check in VLM. VLM Id: ";
+    public static final String CHECK_OUT_VLM = "Check out VLM. VLM Id: ";
+    public static final String SUBMIT_VLM = "submit VLM. VLM Name: ";
+
+    public static final String CREATE_VSP = "Create VSP. VSP Name: ";
+    public static final String CHECK_IN_VSP = "Check in VSP. VSP Id: ";
+    public static final String CHECK_OUT_VSP = "Check out VSP. VSP Id: ";
+    public static final String SUBMIT_VSP = "Submit VSP. VSP Id: ";
+
+    public static final String UPLOAD_HEAT = "Upload HEAT. VSP Id: ";
+    public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact. VSP Id: ";
+    public static final String UPLOAD_ARTIFACT_MIB_POLL = "Upload Artifact SNMP POLL. VSP Id: ";
+    public static final String UPLOAD_ARTIFACT_MIB_TRAP = "Upload Artifact SNMP TRAP. VSP Id: ";
+
+    public static final String IMPORT_SUCCESS = "VSP import to VF success. VSP Id: ";
+    public static final String IMPORT_FAIL = "VSP import to VF fail. VSP Id: ";
+
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/DebugMessages.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/DebugMessages.java
new file mode 100644
index 0000000..c3e5f97
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/messages/DebugMessages.java
@@ -0,0 +1,34 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.messages;
+
+
+public class DebugMessages {
+  public static final String DEFAULT_ENTER_METHOD = "Entering %s";
+  public static final String DEFAULT_EXIT_METHOD = "Exiting %s";
+
+  public static final String ENTER_METHOD = "Entering %s with %s = %s";
+  public static final String EXIT_METHOD = "Exiting %s with %s = %s";
+
+  public static final String ENTER_METHOD_FORMATTED = "Entering %s with %s";
+  public static final String EXIT_METHOD_FORMATTED = "Exiting %s with %s";
+
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/DebugConstants.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/DebugConstants.java
new file mode 100644
index 0000000..71884cf
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/DebugConstants.java
@@ -0,0 +1,32 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+/**
+ * Created by TALIO on 1/10/2017.
+ */
+public class DebugConstants {
+  public static final String EXIT = "Exit";
+  public static final String EXIT_DEFAULT = "Exit_Default";
+  public static final String ENTER = "Enter";
+  public static final String ENTER_DEFAULT = "Enter_Default";
+  public static final String DEFAULT = "Default";
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerConstants.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerConstants.java
new file mode 100644
index 0000000..0d591be
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerConstants.java
@@ -0,0 +1,41 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+
+public class LoggerConstants {
+
+  public static final String REQUEST_ID = "RequestId";
+  public static final String PARTNER_NAME = "PartnerName";
+  public static final String SERVICE_NAME = "ServiceName";
+  public static final String INSTANCE_UUID = "InstanceUUID";
+  public static final String CATEGORY_LOG_LEVEL = "level";
+  public static final String STATUS_CODE = "StatusCode";
+  public static final String RESPONSE_CODE = "ResponseCode";
+  public static final String RESPONSE_DESCRIPTION = "ResponseDescription";
+  public static final String TARGET_SERVICE_NAME = "TargetServiceName";
+  public static final String TARGET_ENTITY = "TargetEntity";
+  public static final String TARGET_ENTITY_API = "API";
+  public static final String TARGET_ENTITY_DB = "DB";
+  public static final String ERROR_CATEGORY = "ErrorCategory";
+  public static final String ERROR_CODE = "ErrorCode";
+  public static final String ERROR_DESCRIPTION = "ErrorDescription";
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCategory.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCategory.java
new file mode 100644
index 0000000..5addccd
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCategory.java
@@ -0,0 +1,30 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+
+public enum LoggerErrorCategory {
+  ERROR,
+  WARN,
+  DEBUG,
+  INFO,
+  FATAL;
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
new file mode 100644
index 0000000..141a149
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorCode.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+
+public enum LoggerErrorCode {
+  PERMISSION_ERROR("100"),
+  AVAILABILITY_ERROR("200"),
+  DATA_ERROR("300"),
+  SCHEMA_ERROR("400"),
+  BUSINESS_PROCESS_ERROR("500"),
+  UNKNOWN_ERROR("900");
+
+  private String errorCode;
+
+  LoggerErrorCode(String errorCode) {
+    this.errorCode = errorCode;
+  }
+
+  public String getErrorCode() {
+    return errorCode;
+  }
+
+  public void setErrorCode(String errorCode) {
+    this.errorCode = errorCode;
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
new file mode 100644
index 0000000..16a7b43
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerErrorDescription.java
@@ -0,0 +1,109 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+
+public class LoggerErrorDescription {
+  public static final String ARTIFACT_NOT_REFERENCED = "Artifact not referenced";
+  public static final String WRONG_FILE_EXTENSION = "Wrong file extention";
+  public static final String INVALID_HEAT_FORMAT = "Invalid HEAT format";
+  public static final String PARAMETER_NOT_FOUND = "Referenced parameter not found";
+  public static final String ENV_PARAMETER_NOT_IN_HEAT = "env includes parameter not in HEAT";
+  public static final String PARAMETER_DEFAULT_VALUE_NOT_ALIGNED_WITH_TYPE =
+      "Parameter default value not alinged with type";
+  public static final String INVALID_RESOURCE_TYPE = "Invalid resource type";
+  public static final String INVALID_GET_RESOURCE_SYNTAX = "Invalid get resource syntax";
+  public static final String RESOURCE_NOT_FOUND = "Resource not found";
+  public static final String INVALID_INDEX_VAR = "Invalid Resource Group index var";
+  public static final String MISSING_FILE = "Missing file";
+  public static final String MISSING_NOVA_PROPERTIES = "Missing NOVA server properties";
+  public static final String NESTED_LOOP = "Found nested loop";
+  public static final String MISSING_PARAMETER_IN_NESTED = "Missing parameter in nested file";
+  public static final String WRONG_VALUE_ASSIGNED_NESTED_PARAMETER =
+      "Wrong value assigned in nested parameters";
+  public static final String SERVER_NOT_DEFINED_NOVA = "Server not defined from nova";
+  public static final String WRONG_POLICY_SERVER_GROUP = "Wrong policy in server group";
+  public static final String SERVER_GROUP_SECURITY_GROUP_NOT_IN_USE =
+      "Server group or security group is not in use";
+  public static final String NETWORK_ATTACH_POLICY_NOT_IN_USE =
+      "Network Attach Policy is not in use";
+  public static final String NO_BIND_FROM_PORT_TO_NOVA = "No bind from port to nova sever";
+  public static final String PORT_BINDS_MORE_THAN_ONE_NOVA =
+      "Port binds to more than one nova sever";
+  public static final String MISSING_RESOURCE_DEPENDS_ON = "Missing resource in depends_on";
+  public static final String GET_ATTR_NOT_FOUND = "get_attr not found";
+  public static final String MISSING_GET_PARAM = "Missing get_param";
+  public static final String EMPTY_FILE = "Empty file";
+  public static final String VALIDATE_FILE = "Can't validate file";
+  public static final String INVALID_FILE_TYPE = "Invalid file type";
+  public static final String INVALID_ZIP = "Invalid zip file";
+
+
+  public static final String RESOURCE_UNIQUE_NETWORK_ROLE =
+      "Resource connects to two networks with the same role";
+  public static final String NAME_NOT_ALIGNED_WITH_GUIDELINES = "Name not aligned with guidelines";
+  public static final String VOLUME_FILE_NOT_EXPOSED = "Volume file not exposed";
+  public static final String RESOURCE_NOT_DEFINED_AS_OUTPUT = "Resource is not defined as output";
+  public static final String FLOATING_IP_IN_USE = "Floating IP resource type is in use";
+  public static final String MISSING_BASE_HEAT = "Missing base HEAT file";
+  public static final String MULTI_BASE_HEAT = "Multi base HEAT file";
+
+  public static final String EXTRACT_COMPOSITION_DATA = "Can't extract composition data";
+
+  public static final String MERGE_CONTRAIL_2_AND_3 =
+      "Merge of Contrail 2 and Contrail 3 resources";
+  public static final String CONTRAIL_2_IN_USE = "Contrail 2 resource is in use";
+
+  public static final String INVALID_MANIFEST = "Invalid manifest file";
+
+  public static final String INVALID_YAML_FORMAT = "Invalid YAML format";
+
+  public static final String CREATE_SERVICE_ARTIFACT = "Can't create service artifact";
+  public static final String CREATE_ENRICH_SERVICE_ARTIFACT =
+      "Can't create enriched service artifact";
+  public static final String CREATE_SERVICE_TEMPLATE = "Can't create service template";
+  public static final String CREATE_ENRICH_SERVICE_TEMPLATE =
+      "Can't create enriched service template";
+  public static final String GET_SERVICE_MODEL = "Can't get service model";
+  public static final String MISSING_MANDATORY_PROPERTY = "Missing mandatory property";
+  public static final String INVALID_PROPERTY = "Invalid Property";
+  public static final String INVALID_ADD_ACTION = "Invalid add action";
+  public static final String UNSUPPORTED_ENTITY = "Unsupported entity";
+  public static final String CREATE_CSAR = "Can't create CSAR file";
+  public static final String PACK_ARTIFACTS = "Can't pack artifacts into CSAR file";
+
+  public static final String TRANSLATE_HEAT = "Can't translate HEAT file";
+  public static final String RESOURCE_FILE_READ_ERROR = "Can't read resource file from class path.";
+  public static final String FAILED_TO_GENERATE_GLOBAL_TYPES = "Failed to generate globalTypes";
+
+  public static final String CHECKOUT_ENTITY = "Can't checkout versionable entity";
+  public static final String SUBMIT_ENTITY = "Can't submit versionable entity";
+  public static final String ENTITY_NOT_FOUND = "Versionable entity not found";
+  public static final String INVALID_VALUE = "Invalid value";
+
+  public static final String UNSUPPORTED_OPERATION = "Unsupported operation";
+  public static final String INVALID_JSON = "Invalid JSON format";
+
+  public static final String INSERT_INTO_APPLICATION_CONFIG =
+      "Can't insert value into application config table";
+
+  public static final String CANT_HEAL = "Can't perform healing operation";
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
new file mode 100644
index 0000000..3fac954
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerServiceName.java
@@ -0,0 +1,153 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+
+public enum LoggerServiceName {
+
+  Create_VLM,
+  Get_VLM,
+  Checkout_VLM,
+  Checkin_VLM,
+  Undo_Checkout_VLM,
+  Submit_VLM,
+  Update_VLM,
+  List_VLM,
+
+  List_EP,
+  Create_EP,
+  Update_EP,
+  Get_EP,
+  Delete_EP,
+
+  List_FG,
+  Create_FG,
+  Update_FG,
+  Get_FG,
+  Delete_FG,
+
+  List_LA,
+  Create_LA,
+  Update_LA,
+  Get_LA,
+  Delete_LA,
+
+  List_LKG,
+  Create_LKG,
+  Update_LKG,
+  Get_LKG,
+  Delete_LKG,
+
+  List_VSPs,
+  List_Packages,
+  Create_VSP,
+  Get_VSP,
+  Checkout_VSP,
+  Checkin_VSP,
+  Undo_Checkout_VSP,
+  Submit_VSP,
+  Update_VSP,
+  Create_Package,
+  List_VSP,
+  Upload_File,
+  Get_Uploaded_File,
+  Get_Translated_File,
+  Get_Questionnaire_VSP,
+  Update_Questionnaire_VSP,
+  Get_Information_Artifact,
+
+
+  List_Component_Processes,
+  Delete_List_Component_Processes,
+  Create_Component_Processes,
+  Update_Component_Processes,
+  Get_Component_Processes,
+  Delete_Component_Processes,
+  Upload_File_Component_Processes,
+  Get_Uploaded_File_Component_Processes,
+  Delete_Uploaded_File_Component_Processes,
+
+  List_Processes,
+  Delete_List_Processes,
+  Create_Processes,
+  Update_Processes,
+  Get_Processes,
+  Delete_Processes,
+  Upload_File_Processes,
+  Get_Uploaded_File_Processes,
+  Delete_Uploaded_File_Processes,
+
+  List_Components,
+  Delete_List_Components,
+  Create_Component,
+  Update_Component,
+  Get_Component,
+  Delete_Component,
+  Get_Questionnaire_Component,
+  Update_Questionnaire_Component,
+
+  Upload_MIB_File,
+  Delete_MIB_File,
+  List_MIB_Files,
+
+  List_Network,
+  Create_Network,
+  Update_Network,
+  Get_Network,
+  Delete_Network,
+
+  List_nics,
+  Delete_List_nics,
+  Create_nic,
+  Update_nic,
+  Get_nic,
+  Delete_nic,
+  Get_Questionnaire_nic,
+  Update_Questionnaire_nic,
+
+  Create_Process,
+  Update_Process,
+
+  Insert_To_ApplicationConfig_Table,
+  Get_From_ApplicationConfig_Table,
+  Get_List_From_ApplicationConfig_Table_By_Namespace,
+
+  Get_List_Activity_Log,
+
+  Validate,
+  Enrich, Delete_VSP, Get_Process_Artifact, Create_Entity, Checkout_Entity, Undo_Checkout_Entity,
+  Checkin_Entity, Submit_Entity, Get_Entity_Version, Delete_Entity, Undo_Delete_Entity,
+  Translate_Resource, Translate_HEAT, LoggerServiceName, Get_VSP_List, Delete_VLM, Update_Manifest,
+
+  CREATE_COMPONENT_DEPENDENCY_MODEL,
+  GET_COMPONENT_DEPENDENCY_MODEL;
+
+  public static String getServiceName(LoggerServiceName serviceName) {
+    return serviceName.name().replace("_", " ");
+  }
+
+  @Override
+  public String toString(){
+    return this.name().replace("_", " ");
+  }
+
+
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
new file mode 100644
index 0000000..b496d73
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/java/org/openecomp/sdc/logging/types/LoggerTragetServiceName.java
@@ -0,0 +1,186 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.types;
+
+
+public class LoggerTragetServiceName {
+  /*HEAT validator*/
+  public static final String VALIDATE_HEAT_BASE_STRUCTURE = "Validate Heat Base Structure";
+  public static final String VALIDATE_ARTIFACTS_EXISTENCE = "Validate Artifacts Existence";
+  public static final String VALIDATE_RESOURCE_REFERENCE_EXISTENCE =
+      "Validate Resource Reference Existence";
+  public static final String VALIDATE_PARAMETER_REFERENCE_EXITENCE =
+      "Validate Parameter Reference Existence";
+  public static final String VALIDATE_GET_ATTR_FROM_NESTED = "Validate get_attr From Nested";
+  public static final String VALIDATE_ENV_FILE = "Validate env File";
+  public static final String VALIDATE_BASE_PORTS_EXISTENCE = "Validate Base Ports Existence";
+  public static final String VALIDATE_ASSIGNED_VALUES_FOR_NOVA_IMAGE_FLAVOR =
+      "Validate Assigned Value For Nova Server Image Or Flavor";
+  public static final String VALIDATE_NOVA_SERVER_PORT_BINDING =
+      "Validate Ports Binding From Nova Server";
+  public static final String VALIDATE_SERVER_GROUP_EXISTENCE =
+      "Validate Nova Server Group Existence";
+  public static final String VALIDATE_PROPERTIES_MATCH_NESTED_PARAMETERS =
+      "Validate All Properties Match Nested Parameters";
+  public static final String VALIDATE_NESTING_LOOPS = "Validate Nested Loops";
+  public static final String VALIDATE_NOVA_SEVER_GROUP_POLICY = "Validate Nova Server Group Policy";
+  public static final String VALIDATE_RESOURCE_GROUP_TYPE = "Validate Resource Group Resource Type";
+  public static final String VALIDATE_ALL_SECURITY_GROUP_USED =
+      "Validate All Security Group Are Used From Neutron Port Resource";
+  public static final String VALIDATE_CONTRAIL_ATTACH_POLICY_TYPE =
+      "Validate Contrail Attach Policy Type";
+  public static final String VALIDATE_SECURITY_GROUP_FROM_BASE_OUTPUT =
+      "Validate Security Groups From Base File Outputs";
+  public static final String CHECK_FOR_ORPHAN_PORTS = "Validate All Referenced Ports Are Used";
+  public static final String CHECK_FOR_ORPHAN_ARTIFACTS = "Validate All Artifacts Are Referenced";
+  public static final String CHECK_FOR_VALID_FILE_EXTENTION = "Validate File Extention";
+  public static final String VALIDATE_PARAMTER_DEFAULT_MATCH_TYPE =
+      "Validate Parameter Default Aligns With Type";
+  public static final String VALIDATE_ENV_PARAMETER_MATCH_TYPE =
+      "Validate env Parameter Matches Type";
+  public static final String VALIDATE_RESOURCE_TYPE = "Validate Resource Type";
+  public static final String VALIDATE_FILE_EXISTENCE = "Validate File Exitence";
+  public static final String GET_RESOURCE_LIST_BY_TYPE =
+      "Get All Resources By Specific Resource Type";
+  public static final String VALIDATE_ALL_SERVER_GROUP_OR_SECURITY_GROUP_IN_USE =
+      "Validate All Security Group Or Server Group Are In Use";
+  public static final String VALIDATE_ATTACH_POLICY_IN_USE =
+      "Validate All Network Attach Policies Are In Use";
+  public static final String CHECK_RESOURCE_DEPENDS_ON = "Check Resource dependes_on";
+  public static final String GET_SHARED_RESOURCES_FROM_OUTPUTS =
+      "Get Shared Resources From Outputs";
+  public static final String VALIDATE_GET_RESOURCE = "Validate get_resource Syntax";
+  public static final String VALIDATE_FILE = "Validate File";
+
+  /*manifest validator*/
+  public static final String VALIDATE_MANIFEST_CONTENT = "Validate Manifest Content";
+  public static final String VALIDATE_FILE_IN_ZIP = "Validate File In Zip";
+  public static final String VALIDATE_FILE_IN_MANIFEST = "Validate File In Manifest";
+  public static final String VALIDATE_FILE_TYPE_AND_NAME =
+      "Validate File Type And Name In Manifest";
+  public static final String SCAN_MANIFEST_STRUCTURE = "Scan Manifest Structure";
+  public static final String VALIDATE_FILE_TYPE = "Validate File Type";
+
+  /*YAML validator*/
+  public static final String VALIDATE_YAML_CONTENT = "Validate YAML Content";
+
+
+  /*OPENECOMP guide line validator*/
+  public static final String VALIDATE_BASE_FILE =
+      "Validate If All Resources In Base File Are Exposed";
+  public static final String VALIDATE_FORBIDDEN_RESOURCE = "Validate If Resource Type Is Forbidden";
+  public static final String VALIDATE_FIXED_IPS_NAME = "Validate fixed_ips Naming Convention";
+  public static final String VALIDATE_IMAGE_AND_FLAVOR_NAME =
+      "Validate image And flavor Naming Convention";
+  public static final String VALIDATE_NOVA_SERVER_NAME = "Validate Nova Server Naming Convention";
+  public static final String VALIDATE_AVAILABILITY_ZONE_NAME =
+      "Validate availability_zone Naming Convention";
+  public static final String VALIDATE_NOVA_META_DATA_NAME =
+      "Validate Nova Server Meta Data Naming Convention";
+  public static final String VALIDATE_PORT_NETWORK_NAME = "Validate Port Network Naming Convention";
+  public static final String VALIDATE_VM_SYNC_IN_IMAGE_FLAVOR =
+      "Validate VM Name Is Sync In Image And Flavor";
+  public static final String VALIDATE_RESOURCE_NETWORK_UNIQUE_ROLW =
+      "Validate Nova Server Unique Role";
+  public static final String VALIDATE_VOLUME_FILE = "Validate HEAT Volume File";
+
+
+  public static final String VALIDATE_CONTRAIL_VM_NAME =
+      "Validate Contrail VM Name Aligned With Guidelines";
+  public static final String MERGE_OF_CONTRAIL_2_AND_3 = "Merge Of Contrail 2 And Contrail 3";
+  public static final String CONTRAIL_2_IN_USE = "Validate Contrail 2 Resource Is In Use";
+
+
+  public static final String VALIDATE_MANIFEST_PRE_CONDITION = "Validate Manifest Pre-Condition";
+  public static final String VALIDATE_HEAT_FORMAT = "Validate HEAT Format";
+
+  public static final String CREATE_ENTITY = "Create Entity";
+  public static final String CHECKOUT_ENTITY = "Checkout Entity";
+  public static final String UNDO_CHECKOUT_ENTITY = "Undo Checkout Entity";
+  public static final String CHECKIN_ENTITY = "Checkin Entity";
+  public static final String SUBMIT_ENTITY = "Submit Entity";
+  public static final String DELETE_ENTITY = "Delete Entity";
+  public static final String UNDO_DELETE_ENTITY = "Undo Delete Entity";
+
+  public static final String SUBMIT_VSP = "Submit VSP";
+  public static final String GET_VSP = "Get VSP";
+  public static final String DELETE_VSP = "Delete VSP";
+  public static final String ENRICH = "Enrich";
+  public static final String UPLOAD_FILE = "Upload file";
+  public static final String GET_UPLOADED_HEAT = "Get Uploaded HEAT File";
+  public static final String GET_TRANSLATED_FILE = "Get Translated File";
+  public static final String CREATE_TRANSLATED_FILE = "Create Translated File";
+  public static final String CREATE_PACKAGE = "Create Package";
+
+  public static final String SELF_HEALING = "Self Healing";
+  public static final String WRITE_ARTIFACT_XML = "Write Artifact To XML File";
+
+  public static final String GET_VLM = "Get VLM";
+
+  public static final String VALIDATE_MIB = "Validate MIB File";
+  public static final String UPLOAD_MIB = "Upload MIB file";
+
+  public static final String GET_VERSION_INFO = "Get version info";
+
+  public static final String CREATE_NETWORK = "Create Network";
+  public static final String DELETE_NETWORK = "Delete Network";
+
+  public static final String CREATE_COMPONENT = "Create Component";
+  public static final String DELETE_COMPONENT = "Delete Component";
+
+  public static final String GET_PROCESS_ARTIFACT = "Get Process Artifact";
+  public static final String UPLOAD_PROCESS_ARTIFACT = "Upload Process Artifact";
+
+  public static final String CREATE_NIC = "Create Nic";
+  public static final String DELETE_NIC = "Delete Nic";
+
+  public static final String EXTRACT_COMPOSITION_DATA = "Extract Composition Data";
+
+  public static final String TRANSLATE_RESOURCE = "Translate Resource";
+  public static final String GET_RESOURCE = "Get Resource";
+  public static final String VALIDATE_HEAT_BEFORE_TRANSLATE = "Validate HEAT Before Translate";
+
+  public static final String CREATE_SERVICE_ARTIFACT = "Create Service Artifact In DB";
+  public static final String CREATE_SERVICE_ENRICH_ARTIFACT =
+      "Create Service Enriched Artifact In DB";
+  public static final String CREATE_SERVICE_TEMPLATE = "Create Service Template In DB";
+  public static final String CREATE_ENRICH_SERVICE_TEMPLATE =
+      "Create Enriched Service Template In DB";
+  public static final String GET_SERVICE_MODEL = "Get service model";
+  public static final String GET_SERVICE_TEMPLATE = "Get Service Template";
+  public static final String CREATE_REQUIREMENT_ASSIGNMENT = "Create Requierment Assignment";
+  public static final String GENERATE_TRANSLATED_ID = "Generate Translated Id";
+  public static final String ADD_ENTITIES_TO_TOSCA = "Add Entities To TOSCA";
+  public static final String CREATE_CSAR = "Create CSAR";
+  public static final String PACK_ARTIFACTS = "Pack Artifacts Into CSAR File";
+
+  public static final String VALIDATE_CHOICE_VALUE = "Check Chosen Value";
+
+  public static final String INSERT_INTO_APPLICATION_CONFIG =
+      "Insert Value Into Application Config";
+
+  public static final String VALIDATE_FILE_DATA_STRUCTURE = "Validate Manifest Sent From User";
+
+  public static final String CREATE_COMPONENT_DEPENDENCY_MODEL = "Create Component Dependency "
+      + "Model";
+
+  public static final String READ_RESOURCE_FILE = "Read Resource File";
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/resources/factoryConfiguration.json b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/resources/factoryConfiguration.json
new file mode 100644
index 0000000..33163b3
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/resources/factoryConfiguration.json
@@ -0,0 +1,3 @@
+{
+  "org.openecomp.sdc.logging.api.BaseFactory": "org.openecomp.sdc.logging.api.LoggerFactory"
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/resources/logback.xml b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/resources/logback.xml
new file mode 100644
index 0000000..8eb22bd
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-api/src/main/resources/logback.xml
@@ -0,0 +1,284 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="5 seconds">
+
+    <property scope="system" name="OPENECOMP-component-name" value="ASDC" />
+    <property scope="system" name="OPENECOMP-subcomponent-name" value="ASDC-BE" />
+    <property file="${config.home}/catalog-be/configuration.yaml" />
+    <property scope="context" name="enable-all-log" value="false" />
+
+    <!--statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />
+    <include resource="asdc_debug_logback.xml"/-->
+
+    <!-- value used by pattern field list (| - is inter-field separator, || - unavailable or not applicable field value) (m - mandatory, o- optional)-->
+    <!--timestamp(m)| requestID(m)| serviceInstanceID(o)| threadID(m)| physicalServerName(o)| serviceName(m)| userID(m)| logLevel(m)| severity(o)| serverIpAddress(m)| serverName(m)| clientIpAddress(o)| className(m)| timer(o)| detailedMessage(o)-->
+    <property name="default-log-pattern"
+              value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{uuid}|%X{serviceInstanceID}|%thread||${OPENECOMP-subcomponent-name}|%X{userId}|%level|%X{alarmSeverity}|%X{localAddr}|${beFqdn}|%X{remoteAddr}|%logger{35}|%X{timer}|ActivityType=&lt;%M&gt;, Desc=&lt;%msg&gt;%n" />
+
+    <property name="asdc-debug-log-pattern" value="%d{yyyy-MM-dd'T'HH:mm:ss.SSSXXX}|%X{RequestId}|%msg %n"/>
+
+    <!-- All log -->
+    <if condition='property("enable-all-log").equalsIgnoreCase("true")'>
+        <then>
+            <appender name="ALL_ROLLING"
+                      class="ch.qos.logback.core.rolling.RollingFileAppender">
+                <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/all.log
+                </file>
+
+                <rollingPolicy
+                        class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+                    <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/all.log.%i
+                    </fileNamePattern>
+                    <minIndex>1</minIndex>
+                    <maxIndex>10</maxIndex>
+                </rollingPolicy>
+
+                <triggeringPolicy
+                        class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+                    <maxFileSize>20MB</maxFileSize>
+                </triggeringPolicy>
+                <encoder>
+                    <pattern>${default-log-pattern}</pattern>
+                </encoder>
+            </appender>
+
+            <appender name="ASYNC_ALL" class="ch.qos.logback.classic.AsyncAppender">
+                <appender-ref ref="ALL_ROLLING" />
+            </appender>
+        </then>
+    </if>
+
+    <!-- Error log -->
+    <appender name="ERROR_ROLLING"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/Error.log
+        </file>
+
+        <!-- Audit messages filter - deny audit messages -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>AUDIT_MARKER</marker>
+            </evaluator>
+            <onMismatch>NEUTRAL</onMismatch>
+            <onMatch>DENY</onMatch>
+        </filter>
+
+        <!-- Transaction messages filter - deny Transaction messages -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>TRANSACTION_MARKER</marker>
+            </evaluator>
+            <onMismatch>NEUTRAL</onMismatch>
+            <onMatch>DENY</onMatch>
+        </filter>
+
+        <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>INFO</level>
+        </filter>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/Error.log.%i
+            </fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>10</maxIndex>
+        </rollingPolicy>
+
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>20MB</maxFileSize>
+        </triggeringPolicy>
+        <encoder>
+            <pattern>${default-log-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Debug log -->
+    <appender name="DEBUG_ROLLING"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug.log
+        </file>
+
+        <!-- No need to deny audit messages - they are INFO only, will be denied
+            anyway -->
+        <!-- Transaction messages filter - deny Transaction messages, there are
+            some DEBUG level messages among them -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>TRANSACTION_MARKER</marker>
+            </evaluator>
+            <onMismatch>NEUTRAL</onMismatch>
+            <onMatch>DENY</onMatch>
+        </filter>
+
+        <!-- accept DEBUG and TRACE level -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
+                <expression>
+                    e.level.toInt() &lt;= DEBUG.toInt()
+                </expression>
+            </evaluator>
+            <OnMismatch>DENY</OnMismatch>
+            <OnMatch>NEUTRAL</OnMatch>
+        </filter>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug.log.%i
+            </fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>10</maxIndex>
+        </rollingPolicy>
+
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>20MB</maxFileSize>
+        </triggeringPolicy>
+        <encoder>
+            <pattern>${default-log-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Debug log -->
+    <appender name="PACKAGE_DEBUG_ROLLING"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug_by_package.log
+        </file>
+
+        <!-- No need to deny audit messages - they are INFO only, will be denied
+            anyway -->
+        <!-- Transaction messages filter - deny Transaction messages, there are
+            some DEBUG level messages among them -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>TRANSACTION_MARKER</marker>
+            </evaluator>
+            <onMismatch>NEUTRAL</onMismatch>
+            <onMatch>DENY</onMatch>
+        </filter>
+
+        <!-- accept DEBUG and TRACE level -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.GEventEvaluator">
+                <expression>
+                    e.level.toInt() &lt;= DEBUG.toInt()
+                </expression>
+            </evaluator>
+            <OnMismatch>DENY</OnMismatch>
+            <OnMatch>NEUTRAL</OnMatch>
+        </filter>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/debug_by_package.log.%i
+            </fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>10</maxIndex>
+        </rollingPolicy>
+
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>20MB</maxFileSize>
+        </triggeringPolicy>
+        <encoder>
+            <pattern>${asdc-debug-log-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Audit log -->
+    <appender name="AUDIT_ROLLING"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/audit.log
+        </file>
+
+        <!-- Audit messages filter - accept audit messages -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>AUDIT_MARKER</marker>
+            </evaluator>
+            <onMismatch>DENY</onMismatch>
+            <onMatch>ACCEPT</onMatch>
+        </filter>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/audit.log.%i
+            </fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>10</maxIndex>
+        </rollingPolicy>
+
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>20MB</maxFileSize>
+        </triggeringPolicy>
+        <encoder>
+            <pattern>${default-log-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- SdncTransaction log -->
+    <appender name="TRANSACTION_ROLLING"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+
+        <file>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/transaction.log
+        </file>
+
+        <!-- Transaction messages filter - accept audit messages -->
+        <filter class="ch.qos.logback.core.filter.EvaluatorFilter">
+            <evaluator class="ch.qos.logback.classic.boolex.OnMarkerEvaluator">
+                <marker>TRANSACTION_MARKER</marker>
+            </evaluator>
+            <onMismatch>DENY</onMismatch>
+            <onMatch>ACCEPT</onMatch>
+        </filter>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+            <fileNamePattern>${log.home}/${OPENECOMP-component-name}/${OPENECOMP-subcomponent-name}/transaction.log.%i
+            </fileNamePattern>
+            <minIndex>1</minIndex>
+            <maxIndex>10</maxIndex>
+        </rollingPolicy>
+
+        <triggeringPolicy
+                class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+            <maxFileSize>20MB</maxFileSize>
+        </triggeringPolicy>
+        <encoder>
+            <pattern>${default-log-pattern}</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Asynchronicity Configurations -->
+    <appender name="ASYNC_DEBUG" class="ch.qos.logback.classic.AsyncAppender">
+        <appender-ref ref="DEBUG_ROLLING" />
+    </appender>
+
+    <appender name="ASYNC_TRANSACTION" class="ch.qos.logback.classic.AsyncAppender">
+        <appender-ref ref="TRANSACTION_ROLLING" />
+    </appender>
+
+    <appender name="ASYNC_ERROR" class="ch.qos.logback.classic.AsyncAppender">
+        <appender-ref ref="ERROR_ROLLING" />
+    </appender>
+
+
+    <root level="INFO">
+        <appender-ref ref="ASYNC_ERROR" />
+        <appender-ref ref="ASYNC_DEBUG" />
+        <appender-ref ref="AUDIT_ROLLING" />
+        <appender-ref ref="ASYNC_TRANSACTION" />
+        <if condition='property("enable-all-log").equalsIgnoreCase("true")'>
+            <then>
+                <appender-ref ref="ALL_ROLLING" />
+            </then>
+        </if>
+    </root>
+
+    <logger name="org.openecomp.sdc" level="INFO" />
+
+    <logger name="org.openecomp.sdc.vendorsoftwareproduct" level="DEBUG" additivity ="false">
+        <appender-ref ref="PACKAGE_DEBUG_ROLLING" />
+    </logger>
+
+    <logger name="org.openecomp.sdc.vendorlicense" level="DEBUG" additivity ="false">
+        <appender-ref ref="PACKAGE_DEBUG_ROLLING" />
+    </logger>
+</configuration>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml
new file mode 100644
index 0000000..a0096e6
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml
@@ -0,0 +1,45 @@
+<?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>
+    <name>openecomp-sdc-logging-core</name>
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>openecomp-sdc-logging-core</artifactId>
+    
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-logging-lib</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+    </parent>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-logging-api</artifactId>
+            <version>${project.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>${spring.framework.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+            <version>${spring.framework.version}</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>${servlet.version}</version>
+        </dependency>
+    </dependencies>
+
+</project>
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup
new file mode 100644
index 0000000..374de71
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/pom.xml.versionsBackup
@@ -0,0 +1,58 @@
+<?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>
+    <dependencies>
+        <!--dependency>
+            <groupId>org.openecomp.core</groupId>
+            <artifactId>openecomp-common-lib</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency-->
+        <dependency>
+            <groupId>org.openecomp.sdc</groupId>
+            <artifactId>openecomp-sdc-logging-api</artifactId>
+            <version>1.0-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <version>4.1.3.RELEASE</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-webmvc</artifactId>
+            <version>4.1.3.RELEASE</version>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <version>2.5</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>1.1.7</version>
+        </dependency>
+
+    </dependencies>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-logging-lib</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <artifactId>openecomp-sdc-logging-core</artifactId>
+    <name>openecomp-sdc-logging-core</name>
+    <version>1.0-SNAPSHOT</version>
+
+    
+</project>
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/Markers.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/Markers.java
new file mode 100644
index 0000000..711e6d1
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/Markers.java
@@ -0,0 +1,50 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging;
+
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+/**
+ * <p>The list of markers that can be used for special logging such as metrics, audit, etc.</p>
+ *
+ * <p>Although markers can be easily instantiated whenever needed, having constants for them helps eliminate mistakes -
+ * misspelling, using a marker that is not handled, etc.</p>
+ *
+ * <p>Usage:</p>
+ *
+ * <pre>
+ *
+ *     Logger log = LogFactory.getLogger(this.getClass());
+ *     log.info(Markers.AUDIT, "User '{}' logged out", user);
+ *
+ * </pre>
+ *
+ * @author EVITALIY
+ * @since 13/09/2016.
+ *
+ * @see Marker
+ */
+public class Markers {
+
+    public static final Marker AUDIT = MarkerFactory.getMarker("AUDIT");
+    public static final Marker METRICS = MarkerFactory.getMarker("METRICS");
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/SLF4JLoggerCreationService.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/SLF4JLoggerCreationService.java
new file mode 100644
index 0000000..5b7ed5e
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/SLF4JLoggerCreationService.java
@@ -0,0 +1,240 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging;
+
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerCreationService;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author evitaliy
+ * @since 13/09/2016.
+ */
+public class SLF4JLoggerCreationService implements LoggerCreationService {
+
+    @Override
+    public Logger getLogger(String className) {
+        return new SFL4JWrapper(className);
+    }
+
+    @Override
+    public Logger getLogger(Class<?> clazz) {
+        return new SFL4JWrapper(clazz);
+    }
+
+    private class SFL4JWrapper implements Logger {
+
+        private final org.slf4j.Logger logger;
+
+        public SFL4JWrapper(Class<?> clazz) {
+            logger = LoggerFactory.getLogger(clazz);
+        }
+
+        public SFL4JWrapper(String className) {
+            logger = LoggerFactory.getLogger(className);
+        }
+
+        @Override
+        public String getName() {
+            return logger.getName();
+        }
+
+        @Override
+        public boolean isMetricsEnabled() {
+            return logger.isInfoEnabled(Markers.METRICS);
+        }
+
+        @Override
+        public void metrics(String msg) {
+            logger.info(Markers.METRICS, msg);
+        }
+
+        @Override
+        public void metrics(String msg, Object arg) {
+            logger.info(Markers.METRICS, msg, arg);
+        }
+
+        @Override
+        public void metrics(String msg, Object arg1, Object arg2) {
+            logger.info(Markers.METRICS, msg, arg1, arg2);
+        }
+
+        @Override
+        public void metrics(String msg, Object... arguments) {
+            logger.info(Markers.METRICS, msg, arguments);
+        }
+
+        @Override
+        public void metrics(String msg, Throwable t) {
+            logger.info(Markers.METRICS, msg, t);
+        }
+
+        @Override
+        public boolean isAuditEnabled() {
+            return logger.isInfoEnabled(Markers.AUDIT);
+        }
+
+        @Override
+        public void audit(String msg) {
+            logger.info(Markers.AUDIT, msg);
+        }
+
+        @Override
+        public void audit(String msg, Object arg) {
+            logger.info(Markers.AUDIT, msg, arg);
+        }
+
+        @Override
+        public void audit(String msg, Object arg1, Object arg2) {
+            logger.info(Markers.AUDIT, msg, arg1, arg2);
+        }
+
+        @Override
+        public void audit(String msg, Object... arguments) {
+            logger.info(Markers.AUDIT, msg, arguments);
+        }
+
+        @Override
+        public void audit(String msg, Throwable t) {
+            logger.info(Markers.AUDIT, msg, t);
+        }
+
+        @Override
+        public boolean isDebugEnabled() {
+            return logger.isDebugEnabled();
+        }
+
+        @Override
+        public void debug(String msg) {
+            logger.debug(msg);
+        }
+
+        @Override
+        public void debug(String format, Object arg) {
+            logger.debug(format, arg);
+        }
+
+        @Override
+        public void debug(String format, Object arg1, Object arg2) {
+            logger.debug(format, arg1, arg2);
+        }
+
+        @Override
+        public void debug(String format, Object... arguments) {
+            logger.debug(format, arguments);
+        }
+
+        @Override
+        public void debug(String msg, Throwable t) {
+            logger.debug(msg, t);
+        }
+
+        @Override
+        public boolean isInfoEnabled() {
+            return logger.isInfoEnabled();
+        }
+
+        @Override
+        public void info(String msg) {
+            logger.info(msg);
+        }
+
+        @Override
+        public void info(String format, Object arg) {
+            logger.info(format, arg);
+        }
+
+        @Override
+        public void info(String format, Object arg1, Object arg2) {
+            logger.info(format, arg1, arg2);
+        }
+
+        @Override
+        public void info(String format, Object... arguments) {
+            logger.info(format, arguments);
+        }
+
+        @Override
+        public void info(String msg, Throwable t) {
+            logger.info(msg, t);
+        }
+
+        @Override
+        public boolean isWarnEnabled() {
+            return logger.isWarnEnabled();
+        }
+
+        @Override
+        public void warn(String msg) {
+            logger.warn(msg);
+        }
+
+        @Override
+        public void warn(String format, Object arg) {
+            logger.warn(format, arg);
+        }
+
+        @Override
+        public void warn(String format, Object... arguments) {
+            logger.warn(format, arguments);
+        }
+
+        @Override
+        public void warn(String format, Object arg1, Object arg2) {
+            logger.warn(format, arg1, arg2);
+        }
+
+        @Override
+        public void warn(String msg, Throwable t) {
+            logger.warn(msg, t);
+        }
+
+        @Override
+        public boolean isErrorEnabled() {
+            return logger.isErrorEnabled();
+        }
+
+        @Override
+        public void error(String msg) {
+            logger.error(msg);
+        }
+
+        @Override
+        public void error(String format, Object arg) {
+            logger.error(format, arg);
+        }
+
+        @Override
+        public void error(String format, Object arg1, Object arg2) {
+            logger.error(format, arg1, arg2);
+        }
+
+        @Override
+        public void error(String format, Object... arguments) {
+            logger.error(format, arguments);
+        }
+
+        @Override
+        public void error(String msg, Throwable t) {
+            logger.error(msg, t);
+        }
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/aspects/DebugAspect.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/aspects/DebugAspect.java
new file mode 100644
index 0000000..7ac5be0
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/aspects/DebugAspect.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.aspects;
+
+import org.aspectj.lang.JoinPoint;
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+import java.lang.reflect.Method;
+
+
+/**
+ * Created by TALIO on 12/26/2016.
+ */
+public class DebugAspect {
+
+  private static final String MESSAGE_TEMPLATE = "'{}' '{}' with '{}'";
+  private static final Marker DEBUG = MarkerFactory.getMarker("DEBUG");
+  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+
+//  @Autowired
+//  private ParameterNameDiscoverer parameterNameDiscoverer;
+
+  public void debugEnterMethod(final JoinPoint joinPoint){
+
+    Class type = joinPoint.getSignature().getDeclaringType();
+    Method currentMethod = null;
+    for(Method method : type.getMethods()){
+      if(method.getName().equals(joinPoint.getSignature().getName())){
+        currentMethod = method;
+        break;
+      }
+    }
+
+//    String[] parameterNames = parameterNameDiscoverer.getParameterNames(currentMethod);
+//    Object[] args = joinPoint.getArgs();
+//    Parameter[] parameters = currentMethod.getParameters();
+//    StringBuilder str = new StringBuilder(joinPoint.getSignature().getName() + " with parameters:" +
+//        " ");
+//    if(args.length == parameters.length) {
+//      for (int i = 0; i < args.length; i++) {
+//        str.append(parameters[i].getName()).append('=').append(args[i]);
+//      }
+//    }
+    mdcDataDebugMessage.debugEntryMessage(null, null);
+  }
+
+  public void debugExitMethod(final JoinPoint joinPoint){
+    mdcDataDebugMessage.debugExitMessage(null, null);
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/aspects/MetricsAspect.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/aspects/MetricsAspect.java
new file mode 100644
index 0000000..782362b
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/aspects/MetricsAspect.java
@@ -0,0 +1,70 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.aspects;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.slf4j.Marker;
+import org.slf4j.MarkerFactory;
+
+/**
+ * <p>Wraps around any method annotated with {@link Metrics} to measure and log its execution time
+ * in milliseconds.</p>
+ * <p>In order for the aspect to be used, AspectJ annotation processing must be tuned on and this
+ * particular aspect enabled. Conversely, it can be disabled completely if the application does not
+ * need to log metrics.</p>
+ * <p>See, for example, <a href="http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html">
+ * Aspect Oriented Programming with Spring</a>.</p>
+ *
+ * @author evitaliy
+ * @see Metrics
+ * @since 27/07/2016.
+ */
+@Aspect
+public class MetricsAspect {
+
+  private static final String MESSAGE_TEMPLATE = "'{}' took {} milliseconds";
+  private static final Marker METRICS = MarkerFactory.getMarker("METRICS");
+
+  @Around("@annotation(org.openecomp.sdc.logging.api.annotations.Metrics)")
+  public Object logExecutionTime(ProceedingJoinPoint pjp) throws Throwable {
+
+    final Logger logger = LoggerFactory.getLogger(pjp.getSignature().getDeclaringTypeName());
+    // measure and log only if the logger for this class is enabled
+    if (logger.isInfoEnabled()) {
+
+      final String method = pjp.getSignature().getName();
+      final long start = System.currentTimeMillis();
+
+      try {
+        return pjp.proceed();
+      } finally {
+        logger.info(METRICS, MESSAGE_TEMPLATE, method, System.currentTimeMillis() - start);
+      }
+
+    } else {
+      return pjp.proceed();
+    }
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/MDCPropagationService.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/MDCPropagationService.java
new file mode 100644
index 0000000..7e29f3c
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/MDCPropagationService.java
@@ -0,0 +1,74 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.context;
+
+import org.openecomp.sdc.logging.api.context.ContextPropagationService;
+import org.slf4j.MDC;
+
+import java.util.Map;
+
+/**
+ * Propagates the <a href="http://www.slf4j.org/manual.html#mdc">SLF4J Mapped Diagnostic Context (MDC)</a>
+ * of a thread onto a runnable created by that thread, so that the context is available when the runnable is executed
+ * in a new thread.
+ *
+ * @author evitaliy
+ * @since 12/09/2016.
+ */
+public class MDCPropagationService implements ContextPropagationService {
+
+    public Runnable create(Runnable task) {
+        return new MDCCopyingWrapper(task);
+    }
+
+    private static class MDCCopyingWrapper implements Runnable {
+
+        private final Runnable task;
+        private final Map<String, String> context;
+
+        private MDCCopyingWrapper(Runnable task) {
+            this.task = task;
+            this.context = MDC.getCopyOfContextMap();
+        }
+
+        @Override
+        public void run() {
+
+            Map<String, String> oldContext = MDC.getCopyOfContextMap();
+            replaceMDC(this.context);
+
+            try {
+                task.run();
+            } finally {
+                replaceMDC(oldContext);
+            }
+        }
+
+        private static void replaceMDC(Map<String, String> context) {
+
+            if (context == null) {
+                MDC.clear();
+            } else  {
+                MDC.setContextMap(context);
+            }
+        }
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/MdcUtil.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/MdcUtil.java
new file mode 100644
index 0000000..24d4716
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/MdcUtil.java
@@ -0,0 +1,59 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.context;
+
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.slf4j.MDC;
+
+import java.util.UUID;
+
+
+public class MdcUtil {
+
+  /**
+   * Sets values for mdc.
+   *
+   * @param targetEntity      the target entity
+   * @param targetServiceName the target service name
+   * @param errorCategory     the error category
+   * @param errorCode         the error code
+   * @param errorDescription  the error description
+   */
+  public static void setValuesForMdc(String targetEntity, String targetServiceName,
+                                     String errorCategory, String errorCode,
+                                     String errorDescription) {
+    MDC.put(LoggerConstants.TARGET_ENTITY, targetEntity);
+    MDC.put(LoggerConstants.TARGET_SERVICE_NAME, targetServiceName);
+    MDC.put(LoggerConstants.ERROR_CATEGORY, errorCategory);
+    MDC.put(LoggerConstants.ERROR_CODE, errorCode);
+    MDC.put(LoggerConstants.ERROR_DESCRIPTION, errorDescription);
+  }
+
+
+  /**
+   * Init mdc.
+   *  @param serviceName the service name
+   *
+   */
+  public static void initMdc(String serviceName) {
+    MDC.put(LoggerConstants.SERVICE_NAME, serviceName);
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/impl/MdcDataDebugMessage.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/impl/MdcDataDebugMessage.java
new file mode 100644
index 0000000..01bc6f4
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/impl/MdcDataDebugMessage.java
@@ -0,0 +1,88 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.context.impl;
+
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.logging.context.MdcData;
+import org.openecomp.sdc.logging.messages.DebugMessages;
+import org.openecomp.sdc.logging.types.DebugConstants;
+import org.openecomp.sdc.logging.types.LoggerErrorCategory;
+import org.openecomp.sdc.logging.util.LoggingUtils;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class MdcDataDebugMessage extends MdcData {
+
+  private static Logger logger;
+  private static Map<String, String> mapExitOrEntryToMessage;
+
+  static {
+    mapExitOrEntryToMessage = new HashMap<>();
+    mapExitOrEntryToMessage.put(DebugConstants.ENTER, DebugMessages.ENTER_METHOD);
+    mapExitOrEntryToMessage.put(DebugConstants.ENTER_DEFAULT, DebugMessages.DEFAULT_ENTER_METHOD);
+    mapExitOrEntryToMessage.put(DebugConstants.EXIT, DebugMessages.EXIT_METHOD);
+    mapExitOrEntryToMessage.put(DebugConstants.EXIT_DEFAULT, DebugMessages.DEFAULT_EXIT_METHOD);
+  }
+
+  public MdcDataDebugMessage() {
+    super(LoggerErrorCategory.DEBUG.name(), null);
+  }
+
+  //todo add more explanations as to the first parameter structure in case of multiples and in
+  // case of no params in method
+  /**
+   * Debug entry message.
+   *
+   * @param entityParameter the entity parameter
+   * @param ids             the ids
+   */
+  public void debugEntryMessage(String entityParameter, String... ids) {
+    logDebugMessage(entityParameter, DebugConstants.ENTER, ids);
+  }
+
+  /**
+   * Debug exit message.
+   *
+   * @param entityParameter the entity parameter
+   * @param ids             the ids
+   */
+  public void debugExitMessage(String entityParameter, String... ids) {
+    logDebugMessage(entityParameter, DebugConstants.EXIT, ids);
+  }
+
+  public void logDebugMessage(String entityParameter, String enterOrExit, String... ids) {
+    String methodName = LoggingUtils.getCallingMethodNameForDebugging();
+    String declaringClass = LoggingUtils.getDeclaringClass();
+    logger = (Logger) LoggerFactory.getLogger(declaringClass);
+    String messageToWrite;
+
+    if (entityParameter == null || ids == null) {
+      messageToWrite = mapExitOrEntryToMessage.get(enterOrExit + "_" + DebugConstants.DEFAULT);
+      logger.debug(String.format(messageToWrite, methodName));
+    } else {
+      messageToWrite = mapExitOrEntryToMessage.get(enterOrExit);
+      logger.debug(String
+          .format(messageToWrite, methodName, entityParameter, String.join(",", ids)));
+    }
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/impl/MdcDataErrorMessage.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/impl/MdcDataErrorMessage.java
new file mode 100644
index 0000000..190c37d
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/context/impl/MdcDataErrorMessage.java
@@ -0,0 +1,76 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.context.impl;
+
+import org.openecomp.sdc.logging.context.MdcData;
+import org.openecomp.sdc.logging.types.LoggerConstants;
+import org.slf4j.MDC;
+
+
+public class MdcDataErrorMessage extends MdcData {
+  private String targetEntity;
+  private String targetServiceName;
+  private String errorDescription;
+
+  /**
+   * Instantiates a new Mdc data error message.
+   *
+   * @param targetEntity      the target entity
+   * @param targetServiceName the target service name
+   * @param errorCategory     the error category
+   * @param errorCode         the error code
+   * @param errorDescription  the error description
+   */
+  public MdcDataErrorMessage(String targetEntity, String targetServiceName, String errorCategory,
+                             String errorCode, String errorDescription) {
+    super(errorCategory, errorCode);
+    this.targetEntity = targetEntity;
+    this.targetServiceName = targetServiceName;
+    this.errorDescription = errorDescription;
+
+    this.setMdcValues();
+  }
+
+  /**
+   * Create error message and update mdc.
+   *
+   * @param targetEntity      the target entity
+   * @param targetServiceName the target service name
+   * @param level             the level
+   * @param errorCode         the error code
+   * @param errorDescription  the error description
+   */
+  public static void createErrorMessageAndUpdateMdc(String targetEntity, String targetServiceName,
+                                                    String level, String errorCode,
+                                                    String errorDescription) {
+    MdcDataErrorMessage mdcDataErrorMessage =
+        new MdcDataErrorMessage(targetEntity, targetServiceName, level, errorCode,
+            errorDescription);
+  }
+
+  @Override
+  public void setMdcValues() {
+    super.setMdcValues();
+    MDC.put(LoggerConstants.TARGET_ENTITY, this.targetEntity);
+    MDC.put(LoggerConstants.TARGET_SERVICE_NAME, this.targetServiceName);
+    MDC.put(LoggerConstants.ERROR_DESCRIPTION, this.errorDescription);
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/logback/DispatchingAppender.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/logback/DispatchingAppender.java
new file mode 100644
index 0000000..2273e1c
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/logback/DispatchingAppender.java
@@ -0,0 +1,148 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.logback;
+
+import ch.qos.logback.classic.Logger;
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.sift.MDCBasedDiscriminator;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.Appender;
+import ch.qos.logback.core.AppenderBase;
+import ch.qos.logback.core.joran.spi.DefaultClass;
+import ch.qos.logback.core.sift.Discriminator;
+import org.slf4j.LoggerFactory;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+/**
+ * <p>Allows to use EELF logging configuration almost as is, by using a custom routing function, but pre-configured
+ * appenders attached to the standard EELF loggers.</p>
+ *
+ * <p>Changes that must be made in <i>logback.xml</i> supplied with EELF:</p>
+ *
+ * <pre>
+ *     &lt;appender name="DISPATCHER" class="org.openecomp.sdc.logging.logback.DispatchingAppender"&gt;
+ *          &lt;discriminator class="org.openecomp.sdc.logging.logback.EventTypeDiscriminator"/&gt;
+ *          &lt;appenderNamePattern&gt;asyncEELF%s&lt;/appenderNamePattern&gt;
+ *     &lt;/appender&gt;
+ *
+ *     &lt;root level="INFO" additivity="false"&gt;
+ *          &lt;appender-ref ref="DISPATCHER" /&gt;
+ *      &lt;/root&gt;
+ * </pre>
+ *
+ * @author EVITALIY
+ * @since 17/08/2016.
+ */
+public class DispatchingAppender extends AppenderBase<ILoggingEvent> {
+
+    // "magic" appender to indicate a missing appender
+    private static final Appender<ILoggingEvent> NO_APPENDER = new DispatchingAppender();
+
+    private Map<String, Appender<ILoggingEvent>> appenders = new ConcurrentHashMap<>();
+
+    private Discriminator<ILoggingEvent> discriminator;
+    private String appenderNamePattern;
+
+    @DefaultClass(MDCBasedDiscriminator.class)
+    public void setDiscriminator(Discriminator<ILoggingEvent> discriminator) {
+        this.discriminator = discriminator;
+    }
+
+    public Discriminator<ILoggingEvent> getDiscriminator() {
+        return this.discriminator;
+    }
+
+    public void setAppenderNamePattern(String pattern) {
+        this.appenderNamePattern = pattern;
+    }
+
+    public String getAppenderNamePattern() {
+        return this.appenderNamePattern;
+    }
+
+    @Override
+    protected void append(ILoggingEvent event) {
+
+        if (this.isStarted()) {
+
+            String discriminatingValue = this.discriminator.getDiscriminatingValue(event);
+            String appenderName = String.format(this.appenderNamePattern, discriminatingValue);
+            Appender<ILoggingEvent> appender = this.lookupAppender(appenderName);
+            if (appender == NO_APPENDER) {
+                this.addError(String.format("Appender %s does not exist", appenderName));
+            } else {
+                appender.doAppend(event);
+            }
+        }
+    }
+
+    private Appender<ILoggingEvent> lookupAppender(String key) {
+
+        Appender<ILoggingEvent> appender = appenders.get(key);
+        if (appender != null) {
+            return appender;
+        }
+
+        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
+        for (Logger log : context.getLoggerList()) {
+
+            Iterator<Appender<ILoggingEvent>> iterator = log.iteratorForAppenders();
+            while (iterator.hasNext()) {
+
+                Appender<ILoggingEvent> element = iterator.next();
+                if (key.equals(element.getName())) {
+                    this.appenders.putIfAbsent(key, element);
+                    return element;
+                }
+            }
+        }
+
+        // to avoid consecutive lookups if the required appender does not exist
+        this.appenders.putIfAbsent(key, NO_APPENDER);
+        return NO_APPENDER;
+    }
+
+    @Override
+    public void start() {
+
+        int errors = 0;
+        if (this.discriminator == null) {
+            this.addError("Missing discriminator. Aborting");
+        }
+
+        if (!this.discriminator.isStarted()) {
+            this.addError("Discriminator has not started successfully. Aborting");
+            ++errors;
+        }
+
+        if (this.appenderNamePattern == null) {
+            this.addError("Missing name pattern. Aborting");
+            ++errors;
+        }
+
+        if (errors == 0) {
+            super.start();
+        }
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/logback/EventTypeDiscriminator.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/logback/EventTypeDiscriminator.java
new file mode 100644
index 0000000..5aa3665
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/logback/EventTypeDiscriminator.java
@@ -0,0 +1,121 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.logback;
+
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+import ch.qos.logback.core.sift.AbstractDiscriminator;
+import org.openecomp.sdc.logging.Markers;
+import org.slf4j.Marker;
+
+/**
+ * Can be used with {@link ch.qos.logback.classic.sift.SiftingAppender} to route events of different types to
+ * separate log files. For example,
+ *
+ * <pre>
+ *     &lt;configuration&gt;
+ *         &lt;appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender"&gt;
+ *             &lt;discriminator class="org.openecomp.sdc.logging.logback.EventTypeDiscriminator"/&gt;
+ *             &lt;sift&gt;
+ *                  &lt;appender name="{EventType}" class="ch.qos.logback.core.rolling.RollingFileAppender"&gt;
+ *                      &lt;file&gt;${logDirectory}/${eventType}.log&lt;/file&gt;
+ *                      &lt;rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"&gt;
+ *                          &lt;fileNamePattern&gt;${logDirectory}/${eventType}.%i.log.zip&lt;/fileNamePattern&gt;
+ *                          &lt;minIndex&gt;1&lt;/minIndex&gt;
+ *                          &lt;maxIndex&gt;9&lt;/maxIndex&gt;
+ *                      &lt;/rollingPolicy&gt;
+ *                      &lt;triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"&gt;
+ *                          &lt;maxFileSize&gt;5MB&lt;/maxFileSize&gt;
+ *                      &lt;/triggeringPolicy&gt;
+ *                      &lt;encoder&gt;
+ *                          &lt;pattern&gt;${defaultPattern}&lt;/pattern&gt;
+ *                      &lt;/encoder&gt;
+ *                  &lt;/appender&gt;
+ *             &lt;/sift&gt;
+ *         &lt;/appender&gt;
+ *
+ *         &lt;root level="INFO"&gt;
+ *             &lt;appender-ref ref="SIFT" /&gt;
+ *         &lt;/root&gt;
+ *     &lt;/configuration&gt;
+ * </pre>
+ *
+ * @author evitaliy
+ * @since 21/07/2016.
+ */
+public class EventTypeDiscriminator extends AbstractDiscriminator<ILoggingEvent> {
+
+    private static final String KEY = "eventType";
+
+    private static final String AUDIT = "Audit";
+    private static final String METRICS = "Metrics";
+    private static final String ERROR = "Error";
+    private static final String DEBUG = "Debug";
+    private static final String DEFAULT = DEBUG;
+
+    private static final int MIN_ERROR_LEVEL = Level.WARN_INT;
+    private static final int MAX_ERROR_LEVEL = Level.ERROR_INT;
+    private static final int DEFAULT_LEVEL = Level.DEBUG_INT;
+
+    @Override
+    public String getDiscriminatingValue(ILoggingEvent event) {
+
+        Level level = event.getLevel();
+        final int levelInt = level == null ? DEFAULT_LEVEL : level.toInt();
+        if ((levelInt > MIN_ERROR_LEVEL - 1) && (levelInt < MAX_ERROR_LEVEL + 1)) {
+            return ERROR;
+        }
+
+        if (levelInt == Level.DEBUG_INT) {
+            return DEBUG;
+        }
+
+        /*
+         * After DEBUG, ERROR, and WARNING have been filtered out,
+         * only TRACE and INFO are left. TRACE is less than DEBUG
+         * and therefore cannot be used. So, INFO should be used for
+         * custom routing like AUDIT and METRICS
+         */
+        if (levelInt == Level.INFO_INT) {
+
+            final Marker marker = event.getMarker();
+            if (marker != null) {
+
+                if (marker.contains(Markers.AUDIT)) {
+                    return AUDIT;
+                }
+
+                if (marker.contains(Markers.METRICS)) {
+                    return METRICS;
+                }
+            }
+
+            return ERROR;
+        }
+
+        return DEFAULT;
+    }
+
+    @Override
+    public String getKey() {
+        return KEY;
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/method/LoggingInvocationHandler.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/method/LoggingInvocationHandler.java
new file mode 100644
index 0000000..8718445
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/method/LoggingInvocationHandler.java
@@ -0,0 +1,45 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.method;
+
+import org.openecomp.sdc.logging.context.impl.MdcDataDebugMessage;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+
+/**
+ * Created by TALIO on 1/8/2017.
+ */
+public class LoggingInvocationHandler implements InvocationHandler {
+
+  private static MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
+  private final Object invocImpl;
+
+  public LoggingInvocationHandler(final Object invocImpl){
+    this.invocImpl = invocImpl;
+  }
+
+  @Override
+  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+    mdcDataDebugMessage.debugEntryMessage(null, null);
+    return method.invoke(invocImpl, args);
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java
new file mode 100644
index 0000000..f617ea6
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/servlet/LoggingFilter.java
@@ -0,0 +1,139 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.servlet;
+
+import org.omg.CORBA.Request;
+import org.slf4j.MDC;
+
+import javax.servlet.*;
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicLong;
+
+
+/**
+ *
+ * <p>Pushes information required by EELF onto MDC (Mapped Diagnostic Context).</p>
+ *
+ * <p>This is servlet filter that should be configured in <i>web.xml</i> to be used. Example:</p>
+ *
+ * <pre>
+ *
+ *  &lt;filter&gt;
+ *      &lt;filter-name&gt;LoggingServletFilter&lt;/filter-name&gt;
+ *      &lt;filter-class&gt;org.openecomp.sdc.logging.servlet.LoggingFilter&lt;/filter-class&gt;
+ *  &lt;/filter&gt;
+ *
+ *  &lt;filter-mapping&gt;
+ *      &lt;filter-name&gt;LoggingServletFilter&lt;/filter-name&gt;
+ *      &lt;url-pattern&gt;/*&lt;/url-pattern&gt;
+ *  &lt;/filter-mapping&gt;
+ *
+ * </pre>
+ *
+ * @author evitaliy
+ * @since 25/07/2016.
+ */
+public class LoggingFilter implements Filter {
+
+    // should be cashed to avoid low-level call, but with a timeout to account for IP or FQDN changes
+    private static final HostAddressCache HOST_ADDRESS = new HostAddressCache();
+    private static final String UNKNOWN = "UNKNOWN";
+
+    public void destroy() {
+    }
+
+    public void doFilter(ServletRequest request, ServletResponse response,
+                         FilterChain chain) throws IOException, ServletException {
+
+        try {
+
+            MDC.clear();
+
+            MDC.put("RequestId", UUID.randomUUID().toString());
+            MDC.put("ServiceInstanceId", "N/A"); // not applicable
+            MDC.put("ServiceName", "ASDC");
+            MDC.put("InstanceUUID", "N/A");
+
+            // For some reason chooses IPv4 or IPv6 in a random way
+            MDC.put("RemoteHost", request.getRemoteHost());
+
+            InetAddress host = HOST_ADDRESS.get();
+
+            String ipAddress, hostName;
+            if (host == null) {
+                ipAddress = UNKNOWN;
+                hostName = UNKNOWN;
+            } else {
+                ipAddress = host.getHostAddress();
+                hostName = host.getHostName();
+            }
+
+            MDC.put("ServerIPAddress", ipAddress);
+            MDC.put("ServerFQDN", hostName);
+
+            if(request instanceof HttpServletRequest) {
+                String userName = ((HttpServletRequest) request).getHeader("USER_ID");
+                MDC.put("PartnerName", userName);
+            }
+            // TODO: Clarify what these stand for
+    //        MDC.put("AlertSeverity", );
+    //        MDC.put("Timer", );
+
+            chain.doFilter(request, response);
+
+        } finally {
+            MDC.clear();
+        }
+    }
+
+    public void init(FilterConfig config) throws ServletException { }
+
+    private static class HostAddressCache {
+
+        private static final long REFRESH_TIME = 1000L;
+
+        private AtomicLong lastUpdated = new AtomicLong(0L);
+        private InetAddress hostAddress;
+
+        public InetAddress get() {
+
+            long current = System.currentTimeMillis();
+            if (current - lastUpdated.get() > REFRESH_TIME) {
+
+                synchronized (this) {
+
+                    try {
+                        lastUpdated.set(current); // set now to register the attempt even if failed
+                        hostAddress = InetAddress.getLocalHost();
+                    } catch (UnknownHostException e) {
+                        hostAddress = null;
+                    }
+                }
+            }
+
+            return hostAddress;
+        }
+    }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/util/LoggingUtils.java b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/util/LoggingUtils.java
new file mode 100644
index 0000000..06b0d5b
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/java/org/openecomp/sdc/logging/util/LoggingUtils.java
@@ -0,0 +1,35 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.logging.util;
+
+/**
+ * Created by TALIO on 1/10/2017.
+ */
+public class LoggingUtils {
+
+  public static String getCallingMethodNameForDebugging() {
+    return Thread.currentThread().getStackTrace()[4].getMethodName();
+  }
+
+  public static String getDeclaringClass(){
+    return Thread.currentThread().getStackTrace()[4].getClassName();
+  }
+}
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/resources/META-INF/services/org.openecomp.sdc.logging.api.LoggerCreationService b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/resources/META-INF/services/org.openecomp.sdc.logging.api.LoggerCreationService
new file mode 100644
index 0000000..ee01c4d
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/resources/META-INF/services/org.openecomp.sdc.logging.api.LoggerCreationService
@@ -0,0 +1 @@
+org.openecomp.sdc.logging.SLF4JLoggerCreationService
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/resources/META-INF/services/org.openecomp.sdc.logging.api.context.ContextPropagationService b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/resources/META-INF/services/org.openecomp.sdc.logging.api.context.ContextPropagationService
new file mode 100644
index 0000000..2c40161
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/openecomp-sdc-logging-core/src/main/resources/META-INF/services/org.openecomp.sdc.logging.api.context.ContextPropagationService
@@ -0,0 +1 @@
+org.openecomp.sdc.logging.context.MDCPropagationService
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-logging-lib/pom.xml b/openecomp-be/lib/openecomp-logging-lib/pom.xml
new file mode 100644
index 0000000..e41b686
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/pom.xml
@@ -0,0 +1,25 @@
+<?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>org.openecomp.sdc</groupId>
+    <name>openecomp-logging-lib</name>
+    <artifactId>openecomp-logging-lib</artifactId>
+    <packaging>pom</packaging>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-lib</artifactId>
+        <version>1.1.0-SNAPSHOT</version>
+        <relativePath>..</relativePath>
+    </parent>
+
+    <modules>
+        <module>/openecomp-sdc-logging-api</module>
+        <module>/openecomp-sdc-logging-core</module>
+    </modules>
+
+    
+</project>
diff --git a/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup b/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup
new file mode 100644
index 0000000..7765713
--- /dev/null
+++ b/openecomp-be/lib/openecomp-logging-lib/pom.xml.versionsBackup
@@ -0,0 +1,24 @@
+<?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>
+
+    <parent>
+        <groupId>org.openecomp.sdc</groupId>
+        <artifactId>openecomp-sdc-lib</artifactId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+
+    <groupId>org.openecomp.sdc</groupId>
+    <name>openecomp-logging-lib</name>
+    <artifactId>openecomp-logging-lib</artifactId>
+    <packaging>pom</packaging>
+
+    <modules>
+        <module>/openecomp-sdc-logging-api</module>
+        <module>/openecomp-sdc-logging-core</module>
+    </modules>
+
+    
+</project>
\ No newline at end of file
