diff --git a/dbrepo-auth-service/listeners/create-event-listener.jar b/dbrepo-auth-service/listeners/create-event-listener.jar
index 619a4f21a6aee3b83552bf2e1b159ded4dd382f8..fb1458371a5ce51be8ca63a9421a621e0ef09ce3 100644
Binary files a/dbrepo-auth-service/listeners/create-event-listener.jar and b/dbrepo-auth-service/listeners/create-event-listener.jar differ
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceMariaDbImpl.java
index 8f66d35842eecf75da0ad637f91d27ee2ca02aa2..fc756583688e0a6a6864a646d0b04b4461474fcb 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceMariaDbImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/AccessServiceMariaDbImpl.java
@@ -42,22 +42,38 @@ public class AccessServiceMariaDbImpl extends DataConnector implements AccessSer
             long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseCreateUserQuery(user.getUsername(), user.getPassword()))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("create user in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_user")
+                    .log();
             /* grant access */
             final String grants = access != AccessTypeDto.READ ? grantDefaultWrite : grantDefaultRead;
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseGrantPrivilegesQuery(user.getUsername(), grants))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("grant user privileges in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "grant_user_privileges")
+                    .log();
             /* grant query store */
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseGrantProcedureQuery(user.getUsername(), "store_query"))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("grant procedure privileges in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "grant_procedure_privileges")
+                    .log();
             /* apply access rights */
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseFlushPrivilegesQuery());
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("flush privileges in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "flush_privileges")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -81,7 +97,11 @@ public class AccessServiceMariaDbImpl extends DataConnector implements AccessSer
             final long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseGrantPrivilegesQuery(user.getUsername(), grants))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("update privileges in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "grant_user_privileges")
+                    .log();
             /* apply access rights */
             connection.prepareStatement(mariaDbMapper.databaseFlushPrivilegesQuery());
             connection.commit();
@@ -105,12 +125,20 @@ public class AccessServiceMariaDbImpl extends DataConnector implements AccessSer
             long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseRevokePrivilegesQuery(user.getUsername()))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("revoke privileges in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "grant_user_privileges")
+                    .log();
             /* apply access rights */
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseFlushPrivilegesQuery())
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("flush privileges in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "flush_privileges")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CacheServiceImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CacheServiceImpl.java
index 2178f89707949077bc9bbf254a408abd84e4e72b..0cd04b304def0ef9812a57594460ab8c1f07af3b 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CacheServiceImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/CacheServiceImpl.java
@@ -56,10 +56,16 @@ public class CacheServiceImpl implements CacheService {
         if (!forceReload) {
             final DatabaseDto cacheDatabase = databaseCache.getIfPresent(id);
             if (cacheDatabase != null) {
-                log.trace("found database with id {} in cache", id);
+                log.atTrace()
+                        .setMessage("found database with id " + id + " in cache")
+                        .addKeyValue("cache_hit", true)
+                        .log();
                 return cacheDatabase;
             }
-            log.debug("database with id {} not it cache (anymore): reload from metadata service", id);
+            log.atTrace()
+                    .setMessage("reload database from metadata service with id " + id + " in cache")
+                    .addKeyValue("cache_hit", false)
+                    .log();
         }
         final DatabaseDto database = gateway.getDatabaseById(id);
         databaseCache.put(id, database);
@@ -77,10 +83,16 @@ public class CacheServiceImpl implements CacheService {
             MetadataServiceException, TableNotFoundException {
         final TableDto cacheTable = tableCache.getIfPresent(tableId);
         if (cacheTable != null) {
-            log.trace("found table with id {} in cache", tableId);
+            log.atTrace()
+                    .setMessage("found table with id " + tableId + " in cache")
+                    .addKeyValue("cache_hit", true)
+                    .log();
             return cacheTable;
         }
-        log.debug("table with id {} not it cache (anymore): reload from metadata service", tableId);
+        log.atTrace()
+                .setMessage("reload table from metadata service with id " + tableId + " in cache")
+                .addKeyValue("cache_hit", false)
+                .log();
         final TableDto table = gateway.getTableById(databaseId, tableId);
         tableCache.put(tableId, table);
         return table;
@@ -91,10 +103,16 @@ public class CacheServiceImpl implements CacheService {
             TableMalformedException, QueryMalformedException, SQLException {
         final TableStatisticDto cacheStatistic = statisticCache.getIfPresent(view.getId());
         if (cacheStatistic != null) {
-            log.trace("found view statistic with id {} in cache", view.getId());
+            log.atTrace()
+                    .setMessage("found view with id " + view.getId() + " in cache")
+                    .addKeyValue("cache_hit", true)
+                    .log();
             return cacheStatistic;
         }
-        log.debug("view statistic with id {} not it cache (anymore): reload", view.getId());
+        log.atTrace()
+                .setMessage("reload view from metadata service with id " + view.getId() + " in cache")
+                .addKeyValue("cache_hit", false)
+                .log();
         final TableStatisticDto statistic = tableService.getStatistics(database, view.getInternalName());
         statistic.setTotalRows(tableService.getCount(database, view.getInternalName(), Instant.now()));
         statisticCache.put(view.getId(), statistic);
@@ -106,10 +124,16 @@ public class CacheServiceImpl implements CacheService {
             ContainerNotFoundException {
         final ContainerDto cacheContainer = containerCache.getIfPresent(id);
         if (cacheContainer != null) {
-            log.trace("found container with id {} in cache", id);
+            log.atTrace()
+                    .setMessage("found container with id " + id + " in cache")
+                    .addKeyValue("cache_hit", true)
+                    .log();
             return cacheContainer;
         }
-        log.debug("container with id {} not it cache (anymore): reload from metadata service", id);
+        log.atTrace()
+                .setMessage("reload container from metadata service with id " + id + " in cache")
+                .addKeyValue("cache_hit", false)
+                .log();
         final ContainerDto container = gateway.getContainerById(id);
         containerCache.put(id, container);
         return container;
@@ -120,10 +144,16 @@ public class CacheServiceImpl implements CacheService {
             MetadataServiceException, ViewNotFoundException {
         final ViewDto cacheView = viewCache.getIfPresent(viewId);
         if (cacheView != null) {
-            log.trace("found view with id {} in cache", viewId);
+            log.atTrace()
+                    .setMessage("found view with id " + viewId + " in cache")
+                    .addKeyValue("cache_hit", true)
+                    .log();
             return cacheView;
         }
-        log.debug("view with id {} not it cache (anymore): reload from metadata service", viewId);
+        log.atTrace()
+                .setMessage("reload view from metadata service with id " + viewId + " in cache")
+                .addKeyValue("cache_hit", false)
+                .log();
         final ViewDto view = gateway.getViewById(databaseId, viewId);
         viewCache.put(viewId, view);
         return view;
@@ -134,10 +164,16 @@ public class CacheServiceImpl implements CacheService {
             UserNotFoundException {
         final UserDto cacheUser = userCache.getIfPresent(id);
         if (cacheUser != null) {
-            log.trace("found user with id {} in cache", id);
+            log.atTrace()
+                    .setMessage("found user with id " + id + " in cache")
+                    .addKeyValue("cache_hit", true)
+                    .log();
             return cacheUser;
         }
-        log.debug("user with id {} not it cache (anymore): reload from metadata service", id);
+        log.atTrace()
+                .setMessage("reload user from metadata service with id " + id + " in cache")
+                .addKeyValue("cache_hit", false)
+                .log();
         final UserDto user = gateway.getUserById(id);
         userCache.put(id, user);
         return user;
@@ -148,10 +184,16 @@ public class CacheServiceImpl implements CacheService {
             MetadataServiceException, NotAllowedException {
         final DatabaseAccessDto cacheAccess = accessCache.getIfPresent(databaseId);
         if (cacheAccess != null) {
-            log.trace("found access for user with id {} to database with id {} in cache", userId, databaseId);
+            log.atTrace()
+                    .setMessage("found access for user with id " + userId + " in cache")
+                    .addKeyValue("cache_hit", true)
+                    .log();
             return cacheAccess;
         }
-        log.debug("access for user with id {} to database with id {} not it cache (anymore): reload from metadata service", userId, databaseId);
+        log.atTrace()
+                .setMessage("reload access from metadata service with user id " + userId + " in cache")
+                .addKeyValue("cache_hit", false)
+                .log();
         final DatabaseAccessDto access = gateway.getAccess(databaseId, userId);
         accessCache.put(databaseId, access);
         return access;
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java
index f4ab2ed2dec88196f9c70aeda0d22735c1afdadf..899f60d685d3d1ed95a329f7949033b91dfe1464 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ContainerServiceMariaDbImpl.java
@@ -1,17 +1,16 @@
 package at.ac.tuwien.ifs.dbrepo.service.impl;
 
+import at.ac.tuwien.ifs.dbrepo.config.RabbitConfig;
 import at.ac.tuwien.ifs.dbrepo.core.api.container.ContainerDto;
 import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto;
 import at.ac.tuwien.ifs.dbrepo.core.api.database.internal.CreateDatabaseDto;
 import at.ac.tuwien.ifs.dbrepo.core.api.user.UserBriefDto;
 import at.ac.tuwien.ifs.dbrepo.core.exception.DatabaseMalformedException;
 import at.ac.tuwien.ifs.dbrepo.core.exception.QueryStoreCreateException;
-import at.ac.tuwien.ifs.dbrepo.config.RabbitConfig;
 import at.ac.tuwien.ifs.dbrepo.mapper.MariaDbMapper;
 import at.ac.tuwien.ifs.dbrepo.service.ContainerService;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.logging.log4j.message.MapMessage;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -41,8 +40,12 @@ public class ContainerServiceMariaDbImpl extends DataConnector implements Contai
             final long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseCreateDatabaseQuery(data.getInternalName()))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
             connection.commit();
+            log.atDebug()
+                    .setMessage("created database: " + data.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_database")
+                    .log();
         } catch (SQLException e) {
             connection.rollback();
             log.error("Failed to create database access: {}", e.getMessage());
@@ -74,19 +77,35 @@ public class ContainerServiceMariaDbImpl extends DataConnector implements Contai
             long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.queryStoreCreateTableRawQuery())
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("created query store in database: " + databaseName)
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_query_store")
+                    .log();
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.queryStoreCreateHashTableProcedureRawQuery())
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("created query store hash table procedure in database: " + databaseName)
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_procedure_hash_table")
+                    .log();
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.queryStoreCreateStoreQueryProcedureRawQuery())
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("created query store procedure in database: " + databaseName)
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_procedure_store_query")
+                    .log();
             start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.queryStoreCreateInternalStoreQueryProcedureRawQuery())
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("created internal query store procedure in database: " + databaseName)
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_procedure_internal_store_query")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceMariaDbImpl.java
index 266ccf7f13d7bb309cb7520ce16eeb977bebfff9..724ef43b2fd887d7fd87ac14314a90eb6f6d689a 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceMariaDbImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/DatabaseServiceMariaDbImpl.java
@@ -1,8 +1,5 @@
 package at.ac.tuwien.ifs.dbrepo.service.impl;
 
-import at.ac.tuwien.ifs.dbrepo.mapper.DataMapper;
-import at.ac.tuwien.ifs.dbrepo.mapper.MariaDbMapper;
-import at.ac.tuwien.ifs.dbrepo.service.DatabaseService;
 import at.ac.tuwien.ifs.dbrepo.core.api.database.DatabaseDto;
 import at.ac.tuwien.ifs.dbrepo.core.api.database.ViewDto;
 import at.ac.tuwien.ifs.dbrepo.core.api.database.table.TableDto;
@@ -10,6 +7,9 @@ import at.ac.tuwien.ifs.dbrepo.core.api.database.table.constraints.unique.Unique
 import at.ac.tuwien.ifs.dbrepo.core.api.database.table.internal.TableCreateDto;
 import at.ac.tuwien.ifs.dbrepo.core.api.user.internal.UpdateUserPasswordDto;
 import at.ac.tuwien.ifs.dbrepo.core.exception.*;
+import at.ac.tuwien.ifs.dbrepo.mapper.DataMapper;
+import at.ac.tuwien.ifs.dbrepo.mapper.MariaDbMapper;
+import at.ac.tuwien.ifs.dbrepo.service.DatabaseService;
 import com.google.common.hash.Hashing;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
 import lombok.extern.slf4j.Slf4j;
@@ -49,7 +49,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement1.setString(2, viewName);
             log.trace("1={}, 2={}", database.getInternalName(), viewName);
             final ResultSet resultSet1 = statement1.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("inspected view: " + viewName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_view_schema")
+                    .log();
             if (!resultSet1.next()) {
                 throw new ViewNotFoundException("Failed to find view in the information schema");
             }
@@ -63,7 +67,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement2.setString(2, view.getInternalName());
             log.trace("1={}, 2={}", database.getInternalName(), view.getInternalName());
             final ResultSet resultSet2 = statement2.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("inspect view columns: " + viewName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_view_columns")
+                    .log();
             TableDto tmp = TableDto.builder()
                     .columns(new LinkedList<>())
                     .build();
@@ -95,7 +103,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             connection.prepareStatement(mariaDbMapper.tableCreateDtoToCreateTableRawQuery(database.getInternalName(),
                             data))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("created table: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_table")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -131,24 +143,32 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
                 .databaseId(database.getId())
                 .columns(new LinkedList<>())
                 .build();
-        log.debug("creating view: {}.{}", database.getInternalName(), view.getInternalName());
         try {
             /* create view if not exists */
-            final long start = System.currentTimeMillis();
+            long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.viewCreateRawQuery(view.getInternalName(), query))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("created view: " + view.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "create_view")
+                    .log();
             /* select view columns */
+            start = System.currentTimeMillis();
             final PreparedStatement statement2 = connection.prepareStatement(mariaDbMapper.databaseTableColumnsSelectRawQuery());
             statement2.setString(1, database.getInternalName());
             statement2.setString(2, view.getInternalName());
             final ResultSet resultSet2 = statement2.executeQuery();
+            log.atDebug()
+                    .setMessage("created view: " + view.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_view_columns")
+                    .log();
             while (resultSet2.next()) {
                 view = dataMapper.resultSetToTable(resultSet2, view);
             }
             connection.commit();
         } catch (SQLException e) {
-            log.error("Failed to create table", e);
             connection.rollback();
             log.error("Failed to create view: {}", e.getMessage());
             throw new ViewMalformedException("Failed to create view: " + e.getMessage(), e);
@@ -171,7 +191,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement.setString(1, database.getInternalName());
             final long start = System.currentTimeMillis();
             final ResultSet resultSet1 = statement.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("explored views in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_views")
+                    .log();
             while (resultSet1.next()) {
                 final String viewName = resultSet1.getString(1);
                 if (viewName.length() == 64) {
@@ -208,7 +232,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             final PreparedStatement statement = connection.prepareStatement(mariaDbMapper.databaseTablesSelectRawQuery());
             statement.setString(1, database.getInternalName());
             final ResultSet resultSet1 = statement.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("explored tables in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_tables")
+                    .log();
             while (resultSet1.next()) {
                 final String tableName = resultSet1.getString(1);
                 if (database.getTables().stream().anyMatch(t -> t.getInternalName().equals(tableName))) {
@@ -243,7 +271,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement1.setString(2, tableName);
             log.trace("1={}, 2={}", database.getInternalName(), tableName);
             TableDto table = dataMapper.schemaResultSetToTable(database, statement1.executeQuery());
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("inspected table: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_table_schema")
+                    .log();
             /* obtain columns metadata */
             start = System.currentTimeMillis();
             final PreparedStatement statement2 = connection.prepareStatement(mariaDbMapper.databaseTableColumnsSelectRawQuery());
@@ -251,7 +283,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement2.setString(2, tableName);
             log.trace("1={}, 2={}", database.getInternalName(), tableName);
             final ResultSet resultSet2 = statement2.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("inspect table columns: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_table_columns")
+                    .log();
             while (resultSet2.next()) {
                 table = dataMapper.resultSetToTable(resultSet2, table);
             }
@@ -262,7 +298,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement3.setString(2, tableName);
             log.trace("1={}, 2={}", database.getInternalName(), tableName);
             final ResultSet resultSet3 = statement3.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("inspect table check constraints: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_table_constraints_check")
+                    .log();
             while (resultSet3.next()) {
                 final String clause = resultSet3.getString(1);
                 table.getConstraints()
@@ -277,7 +317,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             statement4.setString(2, tableName);
             log.trace("1={}, 2={}", database.getInternalName(), tableName);
             final ResultSet resultSet4 = statement4.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("inspect table constraints: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "select_table_constraints")
+                    .log();
             while (resultSet4.next()) {
                 table = dataMapper.resultSetToConstraint(resultSet4, table);
                 for (UniqueDto uk : table.getConstraints().getUniques()) {
@@ -315,7 +359,11 @@ public class DatabaseServiceMariaDbImpl extends DataConnector implements Databas
             final long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.databaseSetPasswordQuery(data.getUsername(), data.getPassword()))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("updated user password: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "update_user_password")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/QueueServiceRabbitMqImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/QueueServiceRabbitMqImpl.java
index f6bd0287ae30921333d1842a90424ee526253163..1a2665738ca5f11a7f3911ad1eb22e5ddc057ae4 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/QueueServiceRabbitMqImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/QueueServiceRabbitMqImpl.java
@@ -47,8 +47,11 @@ public class QueueServiceRabbitMqImpl extends DataConnector implements QueueServ
             }
             final long start = System.currentTimeMillis();
             preparedStatement.executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
-            log.trace("successfully inserted tuple");
+            log.atDebug()
+                    .setMessage("successfully inserted tuple")
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "insert_tuple")
+                    .log();
         } finally {
             dataSource.close();
         }
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java
index 22887c8d10d2049943468db739d0c5ed4b051044..d941f5117fb1787bfe00e4d003f8133473bdeb0a 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/StorageServiceS3Impl.java
@@ -46,21 +46,33 @@ public class StorageServiceS3Impl implements StorageService {
 
     @Override
     public void putObject(String key, byte[] content) {
+        final long start = System.currentTimeMillis();
         s3Client.putObject(PutObjectRequest.builder()
                 .key(key)
                 .bucket(s3Config.getS3Bucket())
                 .build(), RequestBody.fromBytes(content));
-        log.debug("put object in S3 bucket {} with key: {}", s3Config.getS3Bucket(), key);
+        log.atDebug()
+                .setMessage("put object in bucket with key: " + key)
+                .addKeyValue("duration", System.currentTimeMillis() - start)
+                .addKeyValue("action", "s3_put_object")
+                .log();
     }
 
     @Override
     public InputStream getObject(String bucket, String key) throws StorageNotFoundException,
             StorageUnavailableException {
         try {
-            return s3Client.getObject(GetObjectRequest.builder()
+            final long start = System.currentTimeMillis();
+            final InputStream object = s3Client.getObject(GetObjectRequest.builder()
                     .bucket(bucket)
                     .key(key)
                     .build());
+            log.atDebug()
+                    .setMessage("get object from bucket with key: " + key)
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "s3_get_object")
+                    .log();
+            return object;
         } catch (NoSuchKeyException e) {
             log.error("Failed to find object: not found: {}", e.getMessage());
             throw new StorageNotFoundException("Failed to find object: not found: " + e.getMessage(), e);
@@ -88,19 +100,21 @@ public class StorageServiceS3Impl implements StorageService {
 
     @Override
     public void deleteObject(String key) {
+        final long start = System.currentTimeMillis();
         s3Client.deleteObject(DeleteObjectRequest.builder()
                 .bucket(s3Config.getS3Bucket())
                 .key(key)
                 .build());
         log.atDebug()
-                .setMessage("deleted object " + key + " in bucket " + s3Config.getS3Bucket())
-                .addKeyValue("key", key)
-                .addKeyValue("bucket", s3Config.getS3Bucket())
+                .setMessage("delete object from bucket with key: " + key)
+                .addKeyValue("duration", System.currentTimeMillis() - start)
+                .addKeyValue("action", "s3_delete_object")
                 .log();
     }
 
     @Override
     public ExportResourceDto transformDataset(Dataset<Row> dataset) throws StorageUnavailableException {
+        long start = System.currentTimeMillis();
         final List<Map<String, String>> inMemory = dataset.collectAsList()
                 .stream()
                 .map(row -> {
@@ -111,7 +125,12 @@ public class StorageServiceS3Impl implements StorageService {
                     return map;
                 })
                 .toList();
-        log.debug("collected dataset with {} row(s)", inMemory.size());
+        log.atDebug()
+                .setMessage("transformed dataset with rows: " + inMemory.size())
+                .addKeyValue("duration", System.currentTimeMillis() - start)
+                .addKeyValue("action", "dataset_transform")
+                .log();
+        start = System.currentTimeMillis();
         try {
             final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
             try (Writer w = new OutputStreamWriter(byteArrayOutputStream, Charset.defaultCharset())) {
@@ -131,9 +150,15 @@ public class StorageServiceS3Impl implements StorageService {
                 }
                 w.flush();
             }
+            final InputStreamResource resource = new InputStreamResource(new ByteArrayInputStream(byteArrayOutputStream.toByteArray()));
+            log.atDebug()
+                    .setMessage("transformed dataset to input stream resource")
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "dataset_export")
+                    .log();
             return ExportResourceDto.builder()
                     .filename("dataset.csv")
-                    .resource(new InputStreamResource(new ByteArrayInputStream(byteArrayOutputStream.toByteArray())))
+                    .resource(resource)
                     .build();
         } catch (IOException e) {
             log.error("Failed to transform in-memory dataset: {}", e.getMessage());
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/SubsetServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/SubsetServiceMariaDbImpl.java
index 738dfa96429c6ae7458dc04ea50cce629bedc79c..5ba91f2089fa93b4f8d4ae9c81a7325c811c0915 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/SubsetServiceMariaDbImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/SubsetServiceMariaDbImpl.java
@@ -50,13 +50,20 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
     @Override
     public Dataset<Row> getData(DatabaseDto database, String query) throws QueryMalformedException, TableNotFoundException {
         try {
-            return sparkSession.read()
+            final long start = System.currentTimeMillis();
+            final Dataset<Row> dataset = sparkSession.read()
                     .format("jdbc")
                     .option("user", database.getContainer().getUsername())
                     .option("password", database.getContainer().getPassword())
                     .option("url", getSparkUrl(database))
                     .option("query", query)
                     .load();
+            log.atDebug()
+                    .setMessage("get data from url: " + getSparkUrl(database))
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "jdbc_get_data")
+                    .log();
+            return dataset;
         } catch (Exception e) {
             if (e instanceof ExtendedAnalysisException && e.getMessage().contains("TABLE_OR_VIEW_NOT_FOUND")
                     || e instanceof SQLSyntaxErrorException && e.getMessage().contains("doesn't exist")) {
@@ -98,7 +105,11 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
                 log.trace("filter persisted only {}", filterPersisted);
             }
             final ResultSet resultSet = statement.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("list subsets in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "list_queries")
+                    .log();
             final List<QueryDto> queries = new LinkedList<>();
             while (resultSet.next()) {
                 final QueryDto query = dataMapper.resultSetToQueryDto(resultSet);
@@ -132,7 +143,13 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
             final long start = System.currentTimeMillis();
             final ResultSet resultSet = connection.prepareStatement(mariaDbMapper.countRawSelectQuery(statement, timestamp))
                     .executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("count subset in database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "count_query")
+                    .addKeyValue("query", statement)
+                    .addKeyValue("timestamp", timestamp)
+                    .log();
             return mariaDbMapper.resultSetToNumber(resultSet);
         } catch (SQLException e) {
             log.error("Failed to map object: {}", e.getMessage());
@@ -152,7 +169,11 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
             final PreparedStatement preparedStatement = connection.prepareStatement(mariaDbMapper.queryStoreFindQueryRawQuery());
             preparedStatement.setString(1, String.valueOf(queryId));
             final ResultSet resultSet = preparedStatement.executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("find query in query store of database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "find_query")
+                    .log();
             if (!resultSet.next()) {
                 throw new QueryNotFoundException("Failed to find query");
             }
@@ -190,7 +211,12 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
             callableStatement.setTimestamp(3, Timestamp.from(timestamp));
             callableStatement.registerOutParameter(4, Types.VARCHAR);
             callableStatement.executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("store query in query store of database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "store_query")
+                    .addKeyValue("query", query)
+                    .log();
             queryId = UUID.fromString(callableStatement.getString(4));
             callableStatement.close();
             log.info("Stored query with id {} in database with name {}", queryId, database.getInternalName());
@@ -217,7 +243,12 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
             preparedStatement.setBoolean(1, persist);
             preparedStatement.setString(2, String.valueOf(queryId));
             preparedStatement.executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("persist query in query store of database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "persist_query")
+                    .addKeyValue("query_id", queryId)
+                    .log();
         } catch (SQLException e) {
             log.error("Failed to (un-)persist query: {}", e.getMessage());
             throw new QueryStorePersistException("Failed to (un-)persist query", e);
@@ -235,7 +266,11 @@ public class SubsetServiceMariaDbImpl extends DataConnector implements SubsetSer
             final long start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.queryStoreDeleteStaleQueriesRawQuery())
                     .executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("delete stale queries in query store of database: " + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "delete_stale_queries")
+                    .log();
         } catch (SQLException e) {
             log.error("Failed to delete stale queries: {}", e.getMessage());
             throw new QueryStoreGCException("Failed to delete stale queries: " + e.getMessage(), e);
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceMariaDbImpl.java
index 2382ee09f45d9f4a77282cd137cf3ecc0cb4364b..b4551be7d6ad091f992d37744218312924fe1f6d 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceMariaDbImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/TableServiceMariaDbImpl.java
@@ -69,7 +69,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             statistic = dataMapper.resultSetToTableStatistic(resultSet);
             statistic.setTotalColumns(Long.parseLong("" + tmpTable.getColumns()
                     .size()));
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("get table statistics: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "get_table_statistics")
+                    .log();
             statistic.setAvgRowLength(tmpTable.getAvgRowLength());
             statistic.setDataLength(tmpTable.getDataLength());
             statistic.setMaxDataLength(tmpTable.getMaxDataLength());
@@ -102,14 +106,18 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             final long start = System.currentTimeMillis();
             final PreparedStatement statement = connection.prepareStatement(
                     mariaDbMapper.tableNameToUpdateTableRawQuery(database.getInternalName(), table.getInternalName()));
-            log.trace("prepare with arg 1={}", data.getDescription());
+            log.trace("1={}", data.getDescription());
             if (data.getDescription() == null) {
                 statement.setString(1, "");
             } else {
                 statement.setString(1, data.getDescription());
             }
             statement.executeUpdate();
-            log.debug(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("update table comment: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "update_table_comment")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -131,7 +139,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             connection.prepareStatement(mariaDbMapper.dropTableRawQuery(database.getInternalName(),
                             table.getInternalName()))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("delete table: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "delete_table")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -155,7 +167,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             final ResultSet resultSet = connection.prepareStatement(mariaDbMapper.selectHistoryRawQuery(
                             database.getInternalName(), table.getInternalName(), size))
                     .executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("get table history: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "get_table_history")
+                    .log();
             history = dataMapper.resultSetToTableHistory(resultSet);
             connection.commit();
         } catch (SQLException e) {
@@ -181,7 +197,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             final ResultSet resultSet = connection.prepareStatement(mariaDbMapper.selectCountRawQuery(
                             database.getInternalName(), tableName, timestamp))
                     .executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("get table count: " + tableName + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "get_table_count")
+                    .log();
             queryResult = mariaDbMapper.resultSetToNumber(resultSet);
             connection.commit();
         } catch (SQLException e) {
@@ -211,11 +231,17 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
         final String temporaryTable = table.getInternalName() + "_tmp";
         final ComboPooledDataSource dataSource = getDataSource(database);
         final Connection connection = dataSource.getConnection();
+        long start = System.currentTimeMillis();
         try {
             /* import tuple */
             connection.prepareStatement(mariaDbMapper.copyTableSchemaToRawQuery(table.getInternalName(), temporaryTable))
                     .execute();
             connection.commit();
+            log.atDebug()
+                    .setMessage("copy table schema from " + table.getInternalName() + "." + database.getInternalName() + " into temporary table: " + temporaryTable + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_copy_schema")
+                    .log();
         } catch (SQLException e) {
             connection.rollback();
             log.atError()
@@ -226,10 +252,16 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
         }
         log.debug("copied schema from target table {} to import table: {}", table.getInternalName(), temporaryTable);
         try {
+            start = System.currentTimeMillis();
             dataset.write()
                     .mode(SaveMode.Overwrite)
                     .option("header", data.getHeader())
                     .jdbc(getSparkUrl(database), temporaryTable, properties);
+            log.atDebug()
+                    .setMessage("write data into temporary table: " + temporaryTable + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_import_data")
+                    .log();
         } catch (Exception e) {
             log.atError()
                     .setMessage("Failed to write dataset: schema malformed")
@@ -239,10 +271,16 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
         }
         try {
             /* import tuple */
+            start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.temporaryTableToRawMergeQuery(temporaryTable,
                             table.getInternalName(), table.getColumns().stream().map(c -> c.getInternalName()).toList()))
                     .execute();
             connection.commit();
+            log.atDebug()
+                    .setMessage("merge data from temporary table " + temporaryTable + "." + database.getInternalName() + " into table: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_merge_data")
+                    .log();
         } catch (SQLException e) {
             connection.rollback();
             log.atError()
@@ -252,19 +290,21 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             throw new MalformedException("Failed to import tuple: " + e.getMessage(), e);
         } finally {
             /* delete temporary table */
+            start = System.currentTimeMillis();
             connection.prepareStatement(mariaDbMapper.dropTableRawQuery(database.getInternalName(), temporaryTable,
                             false))
                     .execute();
             log.debug("deleted temporary table: {}", temporaryTable);
             connection.commit();
+            log.atDebug()
+                    .setMessage("delete temporary table: " + temporaryTable + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_delete_schema")
+                    .log();
             dataSource.close();
         }
         storageService.deleteObject(data.getLocation());
-        log.atInfo()
-                .setMessage("Imported dataset into table " + database.getInternalName() + "." + table.getInternalName())
-                .addKeyValue("s3_key", data.getLocation())
-                .addKeyValue("table_name", database.getInternalName() + "." + table.getInternalName())
-                .log();
+        log.info("Imported dataset into table {}.{}", database.getInternalName(), table.getInternalName());
     }
 
     @Override
@@ -286,7 +326,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             }
             final long start = System.currentTimeMillis();
             statement.executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("delete tuple in table: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_delete_tuple")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -331,7 +375,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             }
             final long start = System.currentTimeMillis();
             statement.executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("create tuple in table: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_create_tuple")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -368,7 +416,11 @@ public class TableServiceMariaDbImpl extends DataConnector implements TableServi
             }
             final long start = System.currentTimeMillis();
             statement.executeUpdate();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("update tuple in table: " + table.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "table_update_tuple")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
diff --git a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceMariaDbImpl.java
index 589b7eda06f36c6204225da610e369298bff42e5..5bf8ad366017b0ab323ad40808e07e890275f379 100644
--- a/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceMariaDbImpl.java
+++ b/dbrepo-data-service/services/src/main/java/at/ac/tuwien/ifs/dbrepo/service/impl/ViewServiceMariaDbImpl.java
@@ -37,7 +37,11 @@ public class ViewServiceMariaDbImpl extends DataConnector implements ViewService
             connection.prepareStatement(mariaDbMapper.dropViewRawQuery(database.getInternalName(),
                             view.getInternalName()))
                     .execute();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("delete view: " + view.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "view_delete")
+                    .log();
             connection.commit();
         } catch (SQLException e) {
             connection.rollback();
@@ -61,7 +65,11 @@ public class ViewServiceMariaDbImpl extends DataConnector implements ViewService
             final ResultSet resultSet = connection.prepareStatement(mariaDbMapper.selectCountRawQuery(
                             database.getInternalName(), view.getInternalName(), timestamp))
                     .executeQuery();
-            log.trace(EXECUTED_STATEMENT_MS, System.currentTimeMillis() - start);
+            log.atDebug()
+                    .setMessage("count view: " + view.getInternalName() + "." + database.getInternalName())
+                    .addKeyValue("duration", System.currentTimeMillis() - start)
+                    .addKeyValue("action", "count_view")
+                    .log();
             queryResult = mariaDbMapper.resultSetToNumber(resultSet);
             connection.commit();
         } catch (SQLException e) {
diff --git a/helm/dbrepo/files/create-event-listener.jar b/helm/dbrepo/files/create-event-listener.jar
index 619a4f21a6aee3b83552bf2e1b159ded4dd382f8..fb1458371a5ce51be8ca63a9421a621e0ef09ce3 100644
Binary files a/helm/dbrepo/files/create-event-listener.jar and b/helm/dbrepo/files/create-event-listener.jar differ