/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.common;
import org.apache.commons.logging.Log;
/**
* Provides common utilities for logging.
*
* @author Robert Mischke
*/
public final class LogUtils {
private static final String REMOTE_SERVICE_CALL_EXCEPTION_ID_PREFIX = "E#";
private static final RestartSafeIncreasingValueGenerator sharedRestartSafeUniqueIdGenerator = new RestartSafeIncreasingValueGenerator();
private LogUtils() {}
/**
* Logs a message-only error and returns a node-unique log marker for it.
*
* @param log the logger instance to log with (so the correct source class is shown)
* @param logMessage the error message
* @return the generated log marker/id
*/
public static String logErrorAndAssignUniqueMarker(Log log, String logMessage) {
return logExceptionWithStacktraceAndAssignUniqueMarker(log, logMessage, null);
}
/**
* Logs an error with a message and the full stacktrace of an (optional) {@link Throwable} and returns a node-unique log marker for it.
*
* @param log the logger instance to log with (so the correct source class is shown)
* @param logMessage the error message (mandatory)
* @param throwable the causing {@link Throwable}; may be null
* @return the generated log marker/id
*/
public static String logExceptionWithStacktraceAndAssignUniqueMarker(Log log, String logMessage, Throwable throwable) {
final String errorId = generateNewErrorId();
if (throwable != null) {
log.error(StringUtils.format("%s: %s:", errorId, logMessage), throwable);
} else {
log.error(StringUtils.format("%s: %s", errorId, logMessage));
}
return errorId;
}
/**
* Logs an error with a message and the toString() form of an optional {@link Throwable} and returns a node-unique log marker for it.
*
* @param log the logger instance to log with (so the correct source class is shown)
* @param logMessage the error message (mandatory)
* @param throwable the causing {@link Throwable}; may be null
* @return the generated log marker/id
*/
public static String logExceptionAsSingleLineAndAssignUniqueMarker(Log log, String logMessage, Throwable throwable) {
final String errorId = generateNewErrorId();
if (throwable != null) {
log.error(StringUtils.format("%s: %s: %s", errorId, logMessage, throwable.toString()));
} else {
log.error(StringUtils.format("%s: %s", errorId, logMessage));
}
return errorId;
}
private static String generateNewErrorId() {
return REMOTE_SERVICE_CALL_EXCEPTION_ID_PREFIX + sharedRestartSafeUniqueIdGenerator.invalidateAndGet();
}
}