优化定时任务日志
This commit is contained in:
parent
a149e85c61
commit
481c92d538
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
<groupId>cn.axzo.framework</groupId>
|
<groupId>cn.axzo.framework</groupId>
|
||||||
<artifactId>common-common</artifactId>
|
<artifactId>common-common</artifactId>
|
||||||
<version>1.0.14</version>
|
<version>1.0.15</version>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
|||||||
@ -0,0 +1,19 @@
|
|||||||
|
package cn.azxo.framework.common.logger;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 回调无返回值实现
|
||||||
|
*
|
||||||
|
* @author zhaoyong
|
||||||
|
* @see JobLoggerCallbackWithoutResult
|
||||||
|
* @since 2021-11-30 22:07
|
||||||
|
*/
|
||||||
|
public abstract class JobLoggerCallbackWithoutResult implements JobLoggerCallback<Object> {
|
||||||
|
|
||||||
|
public final Object doInExecute() {
|
||||||
|
doInExecuteWithoutResult();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract void doInExecuteWithoutResult();
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.azxo.framework.common.logger;
|
package cn.azxo.framework.common.logger;
|
||||||
|
|
||||||
|
import cn.azxo.framework.common.utils.StringUtils;
|
||||||
import org.slf4j.MDC;
|
import org.slf4j.MDC;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -14,7 +15,7 @@ import java.util.UUID;
|
|||||||
public class JobLoggerTemplate {
|
public class JobLoggerTemplate {
|
||||||
|
|
||||||
public <T> T execute(String mdcKey, JobLoggerCallback<T> action){
|
public <T> T execute(String mdcKey, JobLoggerCallback<T> action){
|
||||||
String uuid = UUID.randomUUID().toString();
|
String uuid = UUID.randomUUID().toString().replaceAll("-", "");
|
||||||
MDC.put(mdcKey, uuid);
|
MDC.put(mdcKey, uuid);
|
||||||
try {
|
try {
|
||||||
return action.doInExecute();
|
return action.doInExecute();
|
||||||
@ -23,4 +24,15 @@ public class JobLoggerTemplate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public <T> T render(String mdcKey, String mdcValue, JobLoggerCallback<T> action){
|
||||||
|
String mdc = MDC.get(mdcKey);
|
||||||
|
String newMdc = StringUtils.join(mdc, ":", mdcValue);
|
||||||
|
MDC.put(mdcKey, newMdc);
|
||||||
|
try {
|
||||||
|
return action.doInExecute();
|
||||||
|
} finally {
|
||||||
|
MDC.put(mdcKey, mdc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,8 @@
|
|||||||
package cn.azxo.framework.common.utils;
|
package cn.azxo.framework.common.utils;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 字符串工具类
|
* 字符串工具类
|
||||||
*
|
*
|
||||||
@ -9,6 +12,12 @@ package cn.azxo.framework.common.utils;
|
|||||||
*/
|
*/
|
||||||
public abstract class StringUtils {
|
public abstract class StringUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The empty String {@code ""}.
|
||||||
|
* @since 2.0
|
||||||
|
*/
|
||||||
|
public static final String EMPTY = "";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>Checks if a CharSequence is whitespace, empty ("") or null.</p>
|
* <p>Checks if a CharSequence is whitespace, empty ("") or null.</p>
|
||||||
*
|
*
|
||||||
@ -63,4 +72,344 @@ public abstract class StringUtils {
|
|||||||
return str == null ? 0 : str.length();
|
return str == null ? 0 : str.length();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Joining
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided array into a single String
|
||||||
|
* containing the provided list of elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No separator is added to the joined String.
|
||||||
|
* Null objects or empty strings within the array are represented by
|
||||||
|
* empty strings.</p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* StringUtils.join(null) = null
|
||||||
|
* StringUtils.join([]) = ""
|
||||||
|
* StringUtils.join([null]) = ""
|
||||||
|
* StringUtils.join(["a", "b", "c"]) = "abc"
|
||||||
|
* StringUtils.join([null, "", "a"]) = "a"
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param <T> the specific type of values to join together
|
||||||
|
* @param elements the values to join together, may be null
|
||||||
|
* @return the joined String, {@code null} if null array input
|
||||||
|
* @since 2.0
|
||||||
|
* @since 3.0 Changed signature to use varargs
|
||||||
|
*/
|
||||||
|
public static <T> String join(final T... elements) {
|
||||||
|
return join(elements, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided array into a single String
|
||||||
|
* containing the provided list of elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list.
|
||||||
|
* A {@code null} separator is the same as an empty String ("").
|
||||||
|
* Null objects or empty strings within the array are represented by
|
||||||
|
* empty strings.</p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* StringUtils.join(null, *) = null
|
||||||
|
* StringUtils.join([], *) = ""
|
||||||
|
* StringUtils.join([null], *) = ""
|
||||||
|
* StringUtils.join(["a", "b", "c"], "--") = "a--b--c"
|
||||||
|
* StringUtils.join(["a", "b", "c"], null) = "abc"
|
||||||
|
* StringUtils.join(["a", "b", "c"], "") = "abc"
|
||||||
|
* StringUtils.join([null, "", "a"], ',') = ",,a"
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param array the array of values to join together, may be null
|
||||||
|
* @param separator the separator character to use, null treated as ""
|
||||||
|
* @return the joined String, {@code null} if null array input
|
||||||
|
*/
|
||||||
|
public static String join(final Object[] array, final String separator) {
|
||||||
|
if (array == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return join(array, separator, 0, array.length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided array into a single String
|
||||||
|
* containing the provided list of elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list.
|
||||||
|
* A {@code null} separator is the same as an empty String ("").
|
||||||
|
* Null objects or empty strings within the array are represented by
|
||||||
|
* empty strings.</p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* StringUtils.join(null, *, *, *) = null
|
||||||
|
* StringUtils.join([], *, *, *) = ""
|
||||||
|
* StringUtils.join([null], *, *, *) = ""
|
||||||
|
* StringUtils.join(["a", "b", "c"], "--", 0, 3) = "a--b--c"
|
||||||
|
* StringUtils.join(["a", "b", "c"], "--", 1, 3) = "b--c"
|
||||||
|
* StringUtils.join(["a", "b", "c"], "--", 2, 3) = "c"
|
||||||
|
* StringUtils.join(["a", "b", "c"], "--", 2, 2) = ""
|
||||||
|
* StringUtils.join(["a", "b", "c"], null, 0, 3) = "abc"
|
||||||
|
* StringUtils.join(["a", "b", "c"], "", 0, 3) = "abc"
|
||||||
|
* StringUtils.join([null, "", "a"], ',', 0, 3) = ",,a"
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param array the array of values to join together, may be null
|
||||||
|
* @param separator the separator character to use, null treated as ""
|
||||||
|
* @param startIndex the first index to start joining from.
|
||||||
|
* @param endIndex the index to stop joining from (exclusive).
|
||||||
|
* @return the joined String, {@code null} if null array input; or the empty string
|
||||||
|
* if {@code endIndex - startIndex <= 0}. The number of joined entries is given by
|
||||||
|
* {@code endIndex - startIndex}
|
||||||
|
* @throws ArrayIndexOutOfBoundsException ife<br>
|
||||||
|
* {@code startIndex < 0} or <br>
|
||||||
|
* {@code startIndex >= array.length()} or <br>
|
||||||
|
* {@code endIndex < 0} or <br>
|
||||||
|
* {@code endIndex > array.length()}
|
||||||
|
*/
|
||||||
|
public static String join(final Object[] array, String separator, final int startIndex, final int endIndex) {
|
||||||
|
if (array == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (separator == null) {
|
||||||
|
separator = EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
// endIndex - startIndex > 0: Len = NofStrings *(len(firstString) + len(separator))
|
||||||
|
// (Assuming that all Strings are roughly equally long)
|
||||||
|
final int noOfItems = endIndex - startIndex;
|
||||||
|
if (noOfItems <= 0) {
|
||||||
|
return EMPTY;
|
||||||
|
}
|
||||||
|
|
||||||
|
final StringBuilder buf = new StringBuilder(noOfItems * 16);
|
||||||
|
|
||||||
|
for (int i = startIndex; i < endIndex; i++) {
|
||||||
|
if (i > startIndex) {
|
||||||
|
buf.append(separator);
|
||||||
|
}
|
||||||
|
if (array[i] != null) {
|
||||||
|
buf.append(array[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided {@code Iterator} into
|
||||||
|
* a single String containing the provided elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list. Null objects or empty
|
||||||
|
* strings within the iteration are represented by empty strings.</p>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param iterator the {@code Iterator} of values to join together, may be null
|
||||||
|
* @param separator the separator character to use
|
||||||
|
* @return the joined String, {@code null} if null iterator input
|
||||||
|
* @since 2.0
|
||||||
|
*/
|
||||||
|
public static String join(final Iterator<?> iterator, final char separator) {
|
||||||
|
|
||||||
|
// handle null, zero and one elements before building a buffer
|
||||||
|
if (iterator == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!iterator.hasNext()) {
|
||||||
|
return EMPTY;
|
||||||
|
}
|
||||||
|
final Object first = iterator.next();
|
||||||
|
if (!iterator.hasNext()) {
|
||||||
|
@SuppressWarnings( "deprecation" ) // ObjectUtils.toString(Object) has been deprecated in 3.2
|
||||||
|
final
|
||||||
|
String result = defaultString(first.toString(), StringUtils.EMPTY);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// two or more elements
|
||||||
|
final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
|
||||||
|
if (first != null) {
|
||||||
|
buf.append(first);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
buf.append(separator);
|
||||||
|
final Object obj = iterator.next();
|
||||||
|
if (obj != null) {
|
||||||
|
buf.append(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided {@code Iterator} into
|
||||||
|
* a single String containing the provided elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list.
|
||||||
|
* A {@code null} separator is the same as an empty String ("").</p>
|
||||||
|
*
|
||||||
|
* <p>See the examples here: {@link #join(Object[],String)}. </p>
|
||||||
|
*
|
||||||
|
* @param iterator the {@code Iterator} of values to join together, may be null
|
||||||
|
* @param separator the separator character to use, null treated as ""
|
||||||
|
* @return the joined String, {@code null} if null iterator input
|
||||||
|
*/
|
||||||
|
public static String join(final Iterator<?> iterator, final String separator) {
|
||||||
|
|
||||||
|
// handle null, zero and one elements before building a buffer
|
||||||
|
if (iterator == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (!iterator.hasNext()) {
|
||||||
|
return EMPTY;
|
||||||
|
}
|
||||||
|
final Object first = iterator.next();
|
||||||
|
if (!iterator.hasNext()) {
|
||||||
|
final String result = defaultString(first.toString(), StringUtils.EMPTY);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// two or more elements
|
||||||
|
final StringBuilder buf = new StringBuilder(256); // Java default is 16, probably too small
|
||||||
|
if (first != null) {
|
||||||
|
buf.append(first);
|
||||||
|
}
|
||||||
|
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
if (separator != null) {
|
||||||
|
buf.append(separator);
|
||||||
|
}
|
||||||
|
final Object obj = iterator.next();
|
||||||
|
if (obj != null) {
|
||||||
|
buf.append(obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return buf.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided {@code Iterable} into
|
||||||
|
* a single String containing the provided elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list. Null objects or empty
|
||||||
|
* strings within the iteration are represented by empty strings.</p>
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param iterable the {@code Iterable} providing the values to join together, may be null
|
||||||
|
* @param separator the separator character to use
|
||||||
|
* @return the joined String, {@code null} if null iterator input
|
||||||
|
* @since 2.3
|
||||||
|
*/
|
||||||
|
public static String join(final Iterable<?> iterable, final char separator) {
|
||||||
|
if (iterable == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return join(iterable.iterator(), separator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided {@code Iterable} into
|
||||||
|
* a single String containing the provided elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list.
|
||||||
|
* A {@code null} separator is the same as an empty String ("").</p>
|
||||||
|
*
|
||||||
|
* <p>See the examples here: {@link #join(Object[],String)}. </p>
|
||||||
|
*
|
||||||
|
* @param iterable the {@code Iterable} providing the values to join together, may be null
|
||||||
|
* @param separator the separator character to use, null treated as ""
|
||||||
|
* @return the joined String, {@code null} if null iterator input
|
||||||
|
* @since 2.3
|
||||||
|
*/
|
||||||
|
public static String join(final Iterable<?> iterable, final String separator) {
|
||||||
|
if (iterable == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return join(iterable.iterator(), separator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Joins the elements of the provided varargs into a
|
||||||
|
* single String containing the provided elements.</p>
|
||||||
|
*
|
||||||
|
* <p>No delimiter is added before or after the list.
|
||||||
|
* {@code null} elements and separator are treated as empty Strings ("").</p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* StringUtils.joinWith(",", {"a", "b"}) = "a,b"
|
||||||
|
* StringUtils.joinWith(",", {"a", "b",""}) = "a,b,"
|
||||||
|
* StringUtils.joinWith(",", {"a", null, "b"}) = "a,,b"
|
||||||
|
* StringUtils.joinWith(null, {"a", "b"}) = "ab"
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param separator the separator character to use, null treated as ""
|
||||||
|
* @param objects the varargs providing the values to join together. {@code null} elements are treated as ""
|
||||||
|
* @return the joined String.
|
||||||
|
* @throws java.lang.IllegalArgumentException if a null varargs is provided
|
||||||
|
* @since 3.5
|
||||||
|
*/
|
||||||
|
public static String joinWith(final String separator, final Object... objects) {
|
||||||
|
if (objects == null) {
|
||||||
|
throw new IllegalArgumentException("Object varargs must not be null");
|
||||||
|
}
|
||||||
|
|
||||||
|
final String sanitizedSeparator = defaultString(separator, StringUtils.EMPTY);
|
||||||
|
|
||||||
|
final StringBuilder result = new StringBuilder();
|
||||||
|
|
||||||
|
final Iterator<Object> iterator = Arrays.asList(objects).iterator();
|
||||||
|
while (iterator.hasNext()) {
|
||||||
|
@SuppressWarnings("deprecation") // o.k. to use as long as we do not require java 7 or greater
|
||||||
|
final String value = defaultString(iterator.next().toString(), StringUtils.EMPTY);
|
||||||
|
result.append(value);
|
||||||
|
|
||||||
|
if (iterator.hasNext()) {
|
||||||
|
result.append(sanitizedSeparator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Defaults
|
||||||
|
//-----------------------------------------------------------------------
|
||||||
|
/**
|
||||||
|
* <p>Returns either the passed in String,
|
||||||
|
* or if the String is {@code null}, an empty String ("").</p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* StringUtils.defaultString(null) = ""
|
||||||
|
* StringUtils.defaultString("") = ""
|
||||||
|
* StringUtils.defaultString("bat") = "bat"
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @see String#valueOf(Object)
|
||||||
|
* @param str the String to check, may be null
|
||||||
|
* @return the passed in String, or the empty String if it
|
||||||
|
* was {@code null}
|
||||||
|
*/
|
||||||
|
public static String defaultString(final String str) {
|
||||||
|
return str == null ? EMPTY : str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <p>Returns either the passed in String, or if the String is
|
||||||
|
* {@code null}, the value of {@code defaultStr}.</p>
|
||||||
|
*
|
||||||
|
* <pre>
|
||||||
|
* StringUtils.defaultString(null, "NULL") = "NULL"
|
||||||
|
* StringUtils.defaultString("", "NULL") = ""
|
||||||
|
* StringUtils.defaultString("bat", "NULL") = "bat"
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @see String#valueOf(Object)
|
||||||
|
* @param str the String to check, may be null
|
||||||
|
* @param defaultStr the default String to return
|
||||||
|
* if the input is {@code null}, may be null
|
||||||
|
* @return the passed in String, or the default if it was {@code null}
|
||||||
|
*/
|
||||||
|
public static String defaultString(final String str, final String defaultStr) {
|
||||||
|
return str == null ? defaultStr : str;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user