branch: elpa/logview commit 3620b1ff3b7e86a353b61bd7b653a23b7b11a6f3 Author: Paul Pogonyshev <pogonys...@gmail.com> Commit: Paul Pogonyshev <pogonys...@gmail.com>
Adapt to Java 17 changes as much as possible (in `datetime' 0.8; also require that version to ensure we deal only with Java 17 data). --- logview.el | 22 ++++++++++++++++++---- test/log4j/fr-1.log | 2 +- test/log4j/fr-2.log | 1 + test/logview.el | 6 ++++++ 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/logview.el b/logview.el index 24ad85c1f6..3164ec45b5 100644 --- a/logview.el +++ b/logview.el @@ -7,7 +7,7 @@ ;; Version: 0.16.4snapshot ;; Keywords: files, tools ;; Homepage: https://github.com/doublep/logview -;; Package-Requires: ((emacs "25.1") (datetime "0.6.1") (extmap "1.0")) +;; Package-Requires: ((emacs "25.1") (datetime "0.8") (extmap "1.0")) ;; This program is free software; you can redistribute it and/or ;; modify it under the terms of the GNU General Public License as @@ -3020,9 +3020,23 @@ returns non-nil." (dolist (pattern (cons time-pattern (mapcar (lambda (date-variant) (datetime-locale-date-time-pattern locale date-variant time-variant)) '(:short :medium :long :full)))) - (push pattern variants) - (push (replace-regexp-in-string "\\<s+\\>" (concat "\\&" decimal-separator "SSS") pattern t) variants) - (push (replace-regexp-in-string "\\<s+\\>" (concat "\\&" decimal-separator "SSSSSS") pattern t) variants)) + (let ((subvariants (list pattern))) + ;; Java 17 (used in `datetime' 0.8+) added commas in a lot of places. We create + ;; variants also without the commas, if only to match older logs. There are also + ;; other changes (e.g. separator "à" is gone in some patterns in French locale), + ;; but those we can't handle transparently and generically, oh well. + (when (string-match "\\(\\w\\), \\(\\w\\)" pattern) + (let ((left (intern (match-string 1 pattern))) + (right (intern (match-string 2 pattern)))) + (when (cond ((memq left '(y d E c)) + (memq right '(H h a))) ; Between date and time. + ((memq left '(s S)) + (memq right '(y d E c)))) ; Between time and date. + (push (replace-match "\\1 \\2" t nil pattern) subvariants)))) + (dolist (pattern subvariants) + (push pattern variants) + (push (replace-regexp-in-string "\\<s+\\>" (concat "\\&" decimal-separator "SSS") pattern t) variants) + (push (replace-regexp-in-string "\\<s+\\>" (concat "\\&" decimal-separator "SSSSSS") pattern t) variants)))) (dolist (pattern variants) (let* ((parts (datetime-recode-pattern 'java 'parsed pattern)) (locale-dependent (datetime-pattern-locale-dependent-p 'parsed parts)) diff --git a/test/log4j/fr-1.log b/test/log4j/fr-1.log index 47c3b266ac..5205c9d928 100644 --- a/test/log4j/fr-1.log +++ b/test/log4j/fr-1.log @@ -1 +1 @@ -27 sept. 2011 à 04:58:59 [thread 1] INFO my.Class - a message +27 sept. 2011, 04:58:59 [thread 1] INFO my.Class - a message diff --git a/test/log4j/fr-2.log b/test/log4j/fr-2.log new file mode 100644 index 0000000000..3284a5157a --- /dev/null +++ b/test/log4j/fr-2.log @@ -0,0 +1 @@ +27 sept. 2011 04:58:59 [thread 1] INFO my.Class - a message diff --git a/test/logview.el b/test/logview.el index ee7b037b8b..85d3e23244 100644 --- a/test/logview.el +++ b/test/logview.el @@ -96,6 +96,12 @@ (logview--test-with-file "log4j/fr-1.log" (should (equal logview--submode-name "SLF4J")))) +(ert-deftest logview-test-log4j-national-timestamp-2 () + ;; It's the same as above, but without comma in the timestamp. See + ;; `logview--all-timestamp-formats'. + (logview--test-with-file "log4j/fr-2.log" + (should (equal logview--submode-name "SLF4J")))) + ;; Issue #2. (ert-deftest logview-test-log4j-parens-in-thread-name () (logview--test-with-file "log4j/parens-in-thread-name.log"