From ab84d11786b111b619ab36b28e6275c09338101e Mon Sep 17 00:00:00 2001 From: Rune Flobakk Date: Thu, 30 May 2024 17:20:54 +0200 Subject: [PATCH] Mention exception in log message on failures --- .../kagkarlsson/scheduler/ExceptionUtils.java | 29 +++++++++++++++++++ .../kagkarlsson/scheduler/ExecutePicked.java | 13 +++++++-- 2 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExceptionUtils.java diff --git a/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExceptionUtils.java b/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExceptionUtils.java new file mode 100644 index 00000000..1eb6a4ae --- /dev/null +++ b/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExceptionUtils.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) Gustav Karlsson + * + *

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. + */ +package com.github.kagkarlsson.scheduler; + +final class ExceptionUtils { + + static String describe(Throwable t) { + if (t == null) { + return null; + } + + String typeDescription = t.getClass().getSimpleName(); + String message = t.getMessage(); + return typeDescription + (message != null ? ": '" + message + "'" : ""); + } + + private ExceptionUtils() {} +} diff --git a/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExecutePicked.java b/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExecutePicked.java index c5564d15..99df0884 100644 --- a/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExecutePicked.java +++ b/db-scheduler/src/main/java/com/github/kagkarlsson/scheduler/ExecutePicked.java @@ -13,6 +13,8 @@ */ package com.github.kagkarlsson.scheduler; +import static com.github.kagkarlsson.scheduler.ExceptionUtils.describe; + import com.github.kagkarlsson.scheduler.logging.ConfigurableLogger; import com.github.kagkarlsson.scheduler.stats.StatsRegistry; import com.github.kagkarlsson.scheduler.task.CompletionHandler; @@ -129,9 +131,10 @@ private void complete( statsRegistry.register(StatsRegistry.SchedulerStatsEvent.COMPLETIONHANDLER_ERROR); statsRegistry.register(StatsRegistry.SchedulerStatsEvent.UNEXPECTED_ERROR); LOG.error( - "Failed while completing execution {}. Execution will likely remain scheduled and locked/picked. " + "Failed while completing execution {}, because {}. Execution will likely remain scheduled and locked/picked. " + "The execution should be detected as dead after a while, and handled according to the tasks DeadExecutionHandler.", execution, + describe(e), e); } } @@ -143,7 +146,10 @@ private void failure( Instant executionStarted, String errorMessagePrefix) { String logMessage = - errorMessagePrefix + " during execution of task with name '{}'. Treating as failure."; + errorMessagePrefix + + " " + + describe(cause) + + " during execution of task with name '{}'. Treating as failure."; failureLogger.log(logMessage, cause, task.getName()); ExecutionComplete completeEvent = @@ -158,9 +164,10 @@ private void failure( statsRegistry.register(StatsRegistry.SchedulerStatsEvent.FAILUREHANDLER_ERROR); statsRegistry.register(StatsRegistry.SchedulerStatsEvent.UNEXPECTED_ERROR); LOG.error( - "Failed while completing execution {}. Execution will likely remain scheduled and locked/picked. " + "Failed while completing execution {}, because {}. Execution will likely remain scheduled and locked/picked. " + "The execution should be detected as dead after a while, and handled according to the tasks DeadExecutionHandler.", execution, + describe(cause), e); } }