aboutsummaryrefslogtreecommitdiffstats
path: root/vespalog/src/main/java/com/yahoo/log/LogMessage.java
diff options
context:
space:
mode:
Diffstat (limited to 'vespalog/src/main/java/com/yahoo/log/LogMessage.java')
-rw-r--r--vespalog/src/main/java/com/yahoo/log/LogMessage.java11
1 files changed, 8 insertions, 3 deletions
diff --git a/vespalog/src/main/java/com/yahoo/log/LogMessage.java b/vespalog/src/main/java/com/yahoo/log/LogMessage.java
index ac5b4fcfa0e..1736352493e 100644
--- a/vespalog/src/main/java/com/yahoo/log/LogMessage.java
+++ b/vespalog/src/main/java/com/yahoo/log/LogMessage.java
@@ -120,10 +120,15 @@ public class LogMessage
private static Instant parseTimestamp(String timeStr) throws InvalidLogFormatException {
try {
- long nanoseconds = (long) (Double.parseDouble(timeStr) * 1_000_000_000L);
- return Instant.ofEpochSecond(0, nanoseconds);
+ int decimalSeparator = timeStr.indexOf('.');
+ if (decimalSeparator == -1) {
+ return Instant.ofEpochSecond(Long.parseLong(timeStr));
+ }
+ long seconds = Long.parseLong(timeStr.substring(0, decimalSeparator));
+ long nanoseconds = Long.parseLong(String.format("%1$-9s", timeStr.substring(decimalSeparator + 1)).replace(' ', '0')); // right pad with zeros
+ return Instant.ofEpochSecond(seconds, nanoseconds);
} catch (NumberFormatException e) {
- throw new InvalidLogFormatException("Invalid time string: " + timeStr);
+ throw new InvalidLogFormatException(String.format("Failed to parse timestamp: %s. Timestamp string: '%s'", e.getMessage(), timeStr), e);
}
}