diff --git a/qqq-backend-core/pom.xml b/qqq-backend-core/pom.xml
index 63a24365..2b0530f7 100644
--- a/qqq-backend-core/pom.xml
+++ b/qqq-backend-core/pom.xml
@@ -65,7 +65,11 @@
aws-java-sdk-secretsmanager
1.12.385
-
+
+ com.ibm.icu
+ icu4j
+ 77.1
+
com.fasterxml.jackson.core
jackson-databind
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java
index 27a369c5..ae01b7af 100755
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/StringUtils.java
@@ -26,6 +26,7 @@ import java.util.Collection;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import com.ibm.icu.text.Transliterator;
/*******************************************************************************
@@ -462,6 +463,17 @@ public class StringUtils
+ /***************************************************************************
+ **
+ ***************************************************************************/
+ public static String replaceNonAsciiCharacters(String s)
+ {
+ Transliterator transliterator = Transliterator.getInstance("Any-Latin; Latin-ASCII");
+ return (transliterator.transliterate(s));
+ }
+
+
+
/***************************************************************************
**
***************************************************************************/
diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/Timer.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/Timer.java
index 455b4cc8..0abe77cb 100644
--- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/Timer.java
+++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/utils/Timer.java
@@ -22,6 +22,7 @@
package com.kingsrook.qqq.backend.core.utils;
+import java.time.Duration;
import com.kingsrook.qqq.backend.core.logging.QLogger;
import org.apache.logging.log4j.Level;
@@ -79,9 +80,36 @@ public class Timer
**
*******************************************************************************/
public void mark(String message)
+ {
+ mark(message, false);
+ }
+
+
+
+ /*******************************************************************************
+ **
+ *******************************************************************************/
+ public void mark(String message, boolean prettyPrint)
{
long now = System.currentTimeMillis();
- LOG.log(level, String.format("%s: Last [%5d] Total [%5d] %s", name, (now - last), (now - start), message));
+
+ if(!prettyPrint)
+ {
+ LOG.log(level, String.format("%s: Last [%5d] Total [%5d] %s", name, (now - last), (now - start), message));
+ }
+ else
+ {
+
+ Duration lastDuration = Duration.ofMillis(now - last);
+ Duration totalDuration = Duration.ofMillis(now - start);
+
+ LOG.log(level, String.format(
+ "%s: Last [%d hours, %d minutes, %d seconds, %d milliseconds] Total [%d hours, %d minutes, %d seconds, %d milliseconds] %s",
+ name, lastDuration.toHours(), lastDuration.toMinutesPart(), lastDuration.toSecondsPart(), lastDuration.toMillisPart(),
+ totalDuration.toHours(), totalDuration.toMinutesPart(), totalDuration.toSecondsPart(), totalDuration.toMillisPart(),
+ message));
+ }
+
last = now;
}
}