Repository: sharkdp/bat (language: rust)

Issue:
syslogs
If there's one thing I really need bat for, it's to query logs, quickly. But it doesn't automatically recognize the syslog syntax and if I enter it manually (-m=syslog=log) it's pretty poor.

I think it is something that by default should be well polished in a tool of this kind.


Discussion / hints:
Thanks for the feedback. Can you share a specific example of a syslog which is highlighted suboptimally please and detail your expectations? :) 
It may be that we need to improve the syslog syntax definition we use. Possibly relevant: https://github.com/sharkdp/bat/issues/463
For example:
I got this from `bat -m=syslog:log /var/log/syslog`:

![Captura de pantalla de 2021-04-04 12-10-42](https://user-images.githubusercontent.com/41755127/113514910-346d7900-953f-11eb-8db0-8522f5493427.png)

And this from vim PaperColor theme colorscheme:

![Captura de pantalla de 2021-04-04 12-10-10](https://user-images.githubusercontent.com/41755127/113514985-bf4e7380-953f-11eb-9c00-779aa881b3cb.png)

As you can see, it helps to recognize numerical values, dates and highlights failures, errors, returns, etc. I think this particular syntax highlighting is a bit excessive, but it still helps a lot to give a quick look at the log.

It would be nice to have something similar, even better, not so blinding, in bat.

Fix patch:
diff --git a/.gitmodules b/.gitmodules
index 12beb70cd7..e611393988 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -94,10 +94,6 @@
 [submodule "assets/syntaxes/Assembly (ARM)"]
 	path = assets/syntaxes/02_Extra/Assembly (ARM)
 	url = https://github.com/tvi/Sublime-ARM-Assembly
-[submodule "assets/syntaxes/syslog-syntax"]
-	path = assets/syntaxes/02_Extra/Syslog
-	url = https://github.com/caos21/syslog-syntax.git
-	branch = master
 [submodule "assets/syntaxes/protobuf-syntax-highlighting"]
 	path = assets/syntaxes/02_Extra/Protobuf
 	url = https://github.com/VcamX/protobuf-syntax-highlighting.git
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d334114877..617f19b6ea 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -13,6 +13,7 @@
 
 ## Syntaxes
 
+- Improved the Syslog syntax highlighting, see #1606 (@keith-hall)
 - Replaced "Advanced CSV" with a custom CSV syntax definition written especially for `bat`; see #1574 (@keith-hall)
 
 ## New themes
diff --git a/assets/patches/Monokai-Extended.tmTheme.patch b/assets/patches/Monokai-Extended.tmTheme.patch
index 16624d5fbe..106b584de5 100644
--- a/assets/patches/Monokai-Extended.tmTheme.patch
+++ b/assets/patches/Monokai-Extended.tmTheme.patch
@@ -16,3 +16,21 @@ index 9c2aa3e..180cbbf 100644
        </dict>
      </dict>
      <dict>
+@@ -1027,7 +1027,7 @@
+       <key>name</key>
+       <string>Invalid</string>
+       <key>scope</key>
+-      <string>invalid</string>
++      <string>invalid, markup.error</string>
+       <key>settings</key>
+       <dict>
+         <key>background</key>
+@@ -1042,7 +1042,7 @@
+       <key>name</key>
+       <string>Invalid deprecated</string>
+       <key>scope</key>
+-      <string>invalid.deprecated</string>
++      <string>invalid.deprecated, markup.warning</string>
+       <key>settings</key>
+       <dict>
+         <key>background</key>
diff --git a/assets/syntaxes/02_Extra/Syslog b/assets/syntaxes/02_Extra/Syslog
deleted file mode 160000
index 7628d4e0b8..0000000000
--- a/assets/syntaxes/02_Extra/Syslog
+++ /dev/null
@@ -1,1 +0,0 @@
-Subproject commit 7628d4e0b89d3b4f0dcc014bfb4a3e3433f5133a
diff --git a/assets/syntaxes/02_Extra/log.sublime-syntax b/assets/syntaxes/02_Extra/log.sublime-syntax
new file mode 100644
index 0000000000..3c699d2ef2
--- /dev/null
+++ b/assets/syntaxes/02_Extra/log.sublime-syntax
@@ -0,0 +1,116 @@
+%YAML 1.2
+---
+# See http://www.sublimetext.com/docs/3/syntax.html
+file_extensions:
+  - log
+scope: text.log
+variables:
+  ipv4_part: (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)
+contexts:
+  main:
+    - match: (\w+)(=)
+      captures:
+        1: variable.parameter.log
+        2: keyword.operator.assignment.log
+    - match: (')([^']*)(')
+      scope: string.quoted.single.log
+      captures:
+        1: punctuation.definition.string.begin.log
+        3: punctuation.definition.string.end.log
+    - match: (")([^"]*)(")
+      scope: string.quoted.double.log
+      captures:
+        1: punctuation.definition.string.begin.log
+        3: punctuation.definition.string.end.log
+    - include: dates
+    - include: ip_addresses
+    - include: numbers
+    - match: \b(?i:fail(?:ure|ed)?|error|exception)\b
+      scope: markup.error.log
+    - match: \b(?i:warn(?:ing)?)\b
+      scope: markup.warning.log
+    #- include: scope:text.html.markdown#autolink-inet
+    - match: \b\w+:/{2,3}
+      scope: markup.underline.link.scheme.log
+      push: url-host
+  dates:
+    - match: \b\d{4}-\d{2}-\d{2}\b
+      scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
+    - match: \b\d{4}/\d{2}/\d{2}\b
+      scope: meta.date.log meta.number.integer.decimal.log constant.numeric.value.log
+    - match: \b(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)(?:(\.)\d{3})?\b
+      scope: meta.time.log meta.number.integer.decimal.log constant.numeric.value.log
+      captures:
+        1: punctuation.separator.decimal.log
+  ip_addresses:
+    - match: \b(?=(?:{{ipv4_part}}\.){3}{{ipv4_part}}\b)
+      push:
+        - meta_scope: meta.ipaddress.v4.log meta.number.integer.decimal.log
+        - match: \d+
+          scope: constant.numeric.value.log
+        - match: \.
+          scope: punctuation.separator.sequence.log
+        - match: ''
+          pop: true
+    - match: (?=(?:\h{0,4}:){2,6}\h{1,4}\b)
+      push:
+        - meta_scope: meta.ipaddress.v6.log meta.number.integer.hexadecimal.log
+        - match: \h{1,4}
+          scope: constant.numeric.value.log
+        - match: ':'
+          scope: punctuation.separator.sequence.log
+        - match: ''
+          pop: true
+  numbers:
+    - match: \b(0x)(\h+)(?:(\.)(\h+))?\b
+      scope: meta.number.float.hexadecimal.log
+      captures:
+        1: constant.numeric.base.log
+        2: constant.numeric.value.log
+        3: constant.numeric.value.log punctuation.separator.decimal.log
+        4: constant.numeric.value.log
+    - match: \b\d+(\.)\d+\b
+      scope: meta.number.float.log constant.numeric.value.log
+      captures:
+        1: punctuation.separator.decimal.log
+    - match: \b\d+\b
+      scope: meta.number.integer.log constant.numeric.value.log
+  url-host:
+    - meta_content_scope: markup.underline.link.host.log
+    - match: \[
+      scope: punctuation.section.brackets.begin.log
+      push:
+        - match: \]
+          scope: punctuation.section.brackets.end.log
+          pop: true
+        - include: ip_addresses
+    - match: '[^:/\s]+'
+    - match: ''
+      set: url-after-host
+  url-after-host:
+    - match: (:)(\d+)
+      scope: markup.underline.link.port.log
+      captures:
+        1: punctuation.separator.mapping.port.log
+        2: constant.numeric.value.log
+    #- include: scope:text.html.markdown#url-escaped-chars
+    - match: (%)\h{2}
+      scope: markup.underline.link.path.log constant.character.escape.url.log
+      captures:
+        1: punctuation.definition.escape.log
+    # After a valid domain, zero or more non-space non-< characters may follow
+    - match: (?=[?!.,:*_~]*[\s<]) # Trailing punctuation (specifically, ?, !, ., ,, :, *, _, and ~) will not be considered part of the autolink, though they may be included in the interior of the link
+      pop: true
+    - match: \( # When an autolink ends in ), we scan the entire autolink for the total number of parentheses. If there is a greater number of closing parentheses than opening ones, we don’t consider the last character part of the autolink, in order to facilitate including an autolink inside a parenthesis
+      push:
+        - meta_scope: markup.underline.link.path.log
+        - match: (?=[?!.,:*_~]*[\s<])
+          pop: true
+        - match: \)
+          pop: true
+    - match: (?=\)[?!.,:*_~]*[\s<])
+      pop: true
+    - match: '[^?!.,:*_~\s<&()%]+|\S'
+      scope: markup.underline.link.path.log
+    - match: ''
+      pop: true
diff --git a/assets/syntaxes/02_Extra/syslog.sublime-syntax b/assets/syntaxes/02_Extra/syslog.sublime-syntax
new file mode 100644
index 0000000000..ce782e505e
--- /dev/null
+++ b/assets/syntaxes/02_Extra/syslog.sublime-syntax
@@ -0,0 +1,63 @@
+%YAML 1.2
+---
+# http://www.sublimetext.com/docs/3/syntax.html
+name: syslog
+file_extensions:
+  - syslog
+scope: text.log.syslog
+contexts:
+  main:
+    - match: ^(\w+\s+\d+)\s+(\d{2}:\d{2}:\d{2})
+      scope: meta.datetime.syslog constant.numeric.syslog
+      captures:
+        1: meta.date.syslog
+        2: meta.time.syslog
+      push: loghost
+    - match: ^
+      push: text
+  loghost:
+    - match: '[\w-]+'
+      scope: entity.other.attribute-name.loghost.syslog
+      set: process
+  process:
+    - match: ([\w-]+)(?:(\[)(\d+)(\]))?(:)
+      captures:
+        1: support.function.process.syslog
+        2: punctuation.separator.pid.begin.syslog
+        3: meta.pid.syslog meta.number.integer.syslog constant.numeric.value.syslog
+        4: punctuation.separator.pid.end.syslog
+        5: punctuation.separator.mapping.syslog
+      set: structured-data
+  structured-data:
+    - match: '\['
+      scope: punctuation.section.mapping.begin.syslog
+      push:
+        - match: \]
+          scope: punctuation.section.mapping.end.syslog
+          pop: true
+        - match: \w+
+          scope: variable.parameter.syslog
+        - match: =
+          scope: keyword.operator.assignment.syslog
+          push:
+            - match: '[^\s\]]+'
+              scope: constant.other.syslog
+              pop: true
+            - match: (?=\])
+              pop: true
+    - match: (?=\S)
+      set: text
+  text:
+    - match: $
+      pop: true
+    - match: '<\w+>'
+      scope: constant.language.syslog
+    - match: \b(CMD)\b\s+(\()
+      captures:
+        1: entity.name.label.syslog
+        2: punctuation.section.block.begin.syslog
+      embed: scope:source.shell.bash
+      escape: \)$
+      escape_captures:
+        0: punctuation.section.block.end.syslog
+    - include: scope:text.log


Test patch:
diff --git a/tests/syntax-tests/highlighted/Log/example.log b/tests/syntax-tests/highlighted/Log/example.log
new file mode 100644
index 0000000000..8387670c65
--- /dev/null
+++ b/tests/syntax-tests/highlighted/Log/example.log
@@ -0,0 +1,2 @@
+[38;2;190;132;255m2021-03-06[0m[38;2;248;248;242m [0m[38;2;190;132;255m23:22:21[0m[38;2;190;132;255m.[0m[38;2;190;132;255m392[0m[38;2;248;248;242m [0m[4;38;2;166;226;46mhttps://[0m[4;38;2;166;226;46m[[0m[4;38;2;190;132;255m2001[0m[4;38;2;166;226;46m:[0m[4;38;2;190;132;255mdb8[0m[4;38;2;166;226;46m:[0m[4;38;2;190;132;255m4006[0m[4;38;2;166;226;46m:[0m[4;38;2;190;132;255m812[0m[4;38;2;166;226;46m:[0m[4;38;2;166;226;46m:[0m[4;38;2;190;132;255m200e[0m[4;38;2;166;226;46m][0m[4;38;2;166;226;46m:[0m[4;38;2;190;132;255m8080[0m[4;38;2;166;226;46m/path/the[0m[4;38;2;190;132;255m%[0m[4;38;2;190;132;255m20[0m[4;38;2;166;226;46mpage[0m[4;38;2;166;226;46m.[0m[4;38;2;166;226;46mhtml[0m
+[38;2;190;132;255m2021-03-06[0m[38;2;248;248;242m [0m[38;2;190;132;255m23:22:21[0m[38;2;248;248;242m [0m[4;38;2;166;226;46mhttps://[0m[4;38;2;166;226;46mexample.com[0m[4;38;2;166;226;46m:[0m[4;38;2;190;132;255m8080[0m[4;38;2;166;226;46m/path/the[0m[4;38;2;190;132;255m%[0m[4;38;2;190;132;255m20[0m[4;38;2;166;226;46mpage[0m[4;38;2;166;226;46m(with_parens)[0m[4;38;2;166;226;46m.[0m[4;38;2;166;226;46mhtml[0m
diff --git a/tests/syntax-tests/highlighted/Syslog/example.syslog b/tests/syntax-tests/highlighted/Syslog/example.syslog
new file mode 100644
index 0000000000..35002a83a6
--- /dev/null
+++ b/tests/syntax-tests/highlighted/Syslog/example.syslog
@@ -0,0 +1,11 @@
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:00:01[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239msystemd[0m[38;2;248;248;242m[[0m[38;2;190;132;255m1[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m logrotate.service: Succeeded.[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:00:01[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239msystemd[0m[38;2;248;248;242m[[0m[38;2;190;132;255m1[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m Finished Rotate log files.[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:00:01[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mcolord[0m[38;2;248;248;242m[[0m[38;2;190;132;255m920[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[38;2;248;248;240mfailed[0m[38;2;248;248;242m to get session [pid [0m[38;2;190;132;255m137485[0m[38;2;248;248;242m]: No data available[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:00:21[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mkernel[0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[3;38;2;253;151;31m55604[0m[38;2;248;248;242m.[0m[3;38;2;253;151;31m908232[0m[38;2;248;248;242m][0m[38;2;248;248;242m audit: [0m[3;38;2;253;151;31mtype[0m[38;2;249;38;114m=[0m[38;2;190;132;255m1400[0m[38;2;248;248;242m audit([0m[38;2;190;132;255m1617483621[0m[38;2;190;132;255m.[0m[38;2;190;132;255m094[0m[38;2;248;248;242m:[0m[38;2;190;132;255m28[0m[38;2;248;248;242m): [0m[3;38;2;253;151;31mapparmor[0m[38;2;249;38;114m=[0m[38;2;230;219;116m"[0m[38;2;230;219;116mDENIED[0m[38;2;230;219;116m"[0m[38;2;248;248;242m [0m[3;38;2;253;151;31moperation[0m[38;2;249;38;114m=[0m[38;2;230;219;116m"[0m[38;2;230;219;116mcapable[0m[38;2;230;219;116m"[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mprofile[0m[38;2;249;38;114m=[0m[38;2;230;219;116m"[0m[38;2;230;219;116m/usr/sbin/cups-browsed[0m[38;2;230;219;116m"[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mpid[0m[38;2;249;38;114m=[0m[38;2;190;132;255m59311[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mcomm[0m[38;2;249;38;114m=[0m[38;2;230;219;116m"[0m[38;2;230;219;116mcups-browsed[0m[38;2;230;219;116m"[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mcapability[0m[38;2;249;38;114m=[0m[38;2;190;132;255m23[0m[38;2;248;248;242m  [0m[3;38;2;253;151;31mcapname[0m[38;2;249;38;114m=[0m[38;2;230;219;116m"[0m[38;2;230;219;116msys_nice[0m[38;2;230;219;116m"[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:01:38[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239msystemd-resolved[0m[38;2;248;248;242m[[0m[38;2;190;132;255m721[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m Server returned [0m[38;2;248;248;240merror[0m[38;2;248;248;242m NXDOMAIN, mitigating potential DNS violation DVE-[0m[38;2;190;132;255m2018[0m[38;2;248;248;242m-[0m[38;2;190;132;255m0001[0m[38;2;248;248;242m, retrying transaction with reduced feature level UDP.[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:04:46[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mntpd[0m[38;2;248;248;242m[[0m[38;2;190;132;255m952[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m Soliciting pool server [0m[38;2;190;132;255m255[0m[38;2;248;248;242m.[0m[38;2;190;132;255m76[0m[38;2;248;248;242m.[0m[38;2;190;132;255m59[0m[38;2;248;248;242m.[0m[38;2;190;132;255m37[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:05:21[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mntpd[0m[38;2;248;248;242m[[0m[38;2;190;132;255m952[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[38;2;248;248;242m:[0m[38;2;248;248;242m:[0m[38;2;190;132;255m1[0m[38;2;248;248;242m local addr [0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m0[0m[38;2;248;248;242m:[0m[38;2;190;132;255m1[0m[38;2;248;248;242m -> [0m[38;2;190;132;255m<null>[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m00:06:29[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mntpd[0m[38;2;248;248;242m[[0m[38;2;190;132;255m952[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m receive: Unexpected origin timestamp [0m[38;2;190;132;255m0x[0m[38;2;190;132;255me414a8d1[0m[38;2;190;132;255m.[0m[38;2;190;132;255m82e825f5[0m[38;2;248;248;242m does not match aorg [0m[38;2;190;132;255m0x[0m[38;2;190;132;255me414a8d5[0m[38;2;190;132;255m.[0m[38;2;190;132;255m82c50d8c[0m[38;2;248;248;242m from server@[0m[38;2;190;132;255m127[0m[38;2;248;248;242m.[0m[38;2;190;132;255m0[0m[38;2;248;248;242m.[0m[38;2;190;132;255m0[0m[38;2;248;248;242m.[0m[38;2;190;132;255m1[0m[38;2;248;248;242m xmt [0m[38;2;190;132;255m0x[0m[38;2;190;132;255me414a8d1[0m[38;2;190;132;255m.[0m[38;2;190;132;255me671d7c4[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m09:30:01[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mCRON[0m[38;2;248;248;242m[[0m[38;2;190;132;255m89278[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m (root) [0m[38;2;166;226;46mCMD[0m[38;2;248;248;242m [0m[38;2;248;248;242m([0m[38;2;102;217;239m[[0m[38;2;255;255;255m [0m[3;38;2;253;151;31m-[0m[3;38;2;253;151;31mx[0m[38;2;255;255;255m /etc/init.d/anacron [0m[38;2;102;217;239m][0m[38;2;255;255;255m [0m[38;2;249;38;114m&&[0m[38;2;255;255;255m [0m[38;2;249;38;114mif[0m[38;2;255;255;255m [0m[38;2;102;217;239m[[0m[38;2;255;255;255m [0m[38;2;249;38;114m![0m[38;2;255;255;255m [0m[3;38;2;253;151;31m-[0m[3;38;2;253;151;31md[0m[38;2;255;255;255m /run/systemd/system [0m[38;2;102;217;239m][0m[38;2;249;38;114m;[0m[38;2;255;255;255m [0m[38;2;249;38;114mthen[0m[38;2;255;255;255m [0m[38;2;255;255;255m/usr/sbin/invoke-rc.d[0m[38;2;255;255;255m anacron start [0m[38;2;249;38;114m>[0m[38;2;255;255;255m/dev/null[0m[38;2;249;38;114m;[0m[38;2;255;255;255m [0m[38;2;249;38;114mfi[0m[38;2;248;248;242m)[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m16:32:07[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mNetworkManager[0m[38;2;248;248;242m[[0m[38;2;190;132;255m740[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[38;2;190;132;255m<info>[0m[38;2;248;248;242m  [[0m[38;2;190;132;255m1617629527[0m[38;2;190;132;255m.[0m[38;2;190;132;255m1101[0m[38;2;248;248;242m] manager: NetworkManager state is now CONNECTED_GLOBAL[0m
+[38;2;190;132;255mApr  4[0m[38;2;190;132;255m [0m[38;2;190;132;255m22:00:45[0m[38;2;248;248;242m [0m[38;2;166;226;46mhostname-here[0m[38;2;248;248;242m [0m[38;2;102;217;239mdbus-daemon[0m[38;2;248;248;242m[[0m[38;2;190;132;255m1094[0m[38;2;248;248;242m][0m[38;2;248;248;242m:[0m[38;2;248;248;242m [0m[38;2;248;248;242m[[0m[3;38;2;253;151;31msession[0m[38;2;248;248;242m [0m[3;38;2;253;151;31muid[0m[38;2;249;38;114m=[0m[38;2;190;132;255m1000[0m[38;2;248;248;242m [0m[3;38;2;253;151;31mpid[0m[38;2;249;38;114m=[0m[38;2;190;132;255m1094[0m[38;2;248;248;242m][0m[38;2;248;248;242m Successfully activated service [0m[38;2;230;219;116m'[0m[38;2;230;219;116mio.github.celluloid_player.Celluloid[0m[38;2;230;219;116m'[0m
diff --git a/tests/syntax-tests/source/Log/example.log b/tests/syntax-tests/source/Log/example.log
new file mode 100644
index 0000000000..35eb1c78a0
--- /dev/null
+++ b/tests/syntax-tests/source/Log/example.log
@@ -0,0 +1,2 @@
+2021-03-06 23:22:21.392 https://[2001:db8:4006:812::200e]:8080/path/the%20page.html
+2021-03-06 23:22:21 https://example.com:8080/path/the%20page(with_parens).html
diff --git a/tests/syntax-tests/source/Syslog/example.syslog b/tests/syntax-tests/source/Syslog/example.syslog
new file mode 100644
index 0000000000..337f14342f
--- /dev/null
+++ b/tests/syntax-tests/source/Syslog/example.syslog
@@ -0,0 +1,11 @@
+Apr  4 00:00:01 hostname-here systemd[1]: logrotate.service: Succeeded.
+Apr  4 00:00:01 hostname-here systemd[1]: Finished Rotate log files.
+Apr  4 00:00:01 hostname-here colord[920]: failed to get session [pid 137485]: No data available
+Apr  4 00:00:21 hostname-here kernel: [55604.908232] audit: type=1400 audit(1617483621.094:28): apparmor="DENIED" operation="capable" profile="/usr/sbin/cups-browsed" pid=59311 comm="cups-browsed" capability=23  capname="sys_nice"
+Apr  4 00:01:38 hostname-here systemd-resolved[721]: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.
+Apr  4 00:04:46 hostname-here ntpd[952]: Soliciting pool server 255.76.59.37
+Apr  4 00:05:21 hostname-here ntpd[952]: ::1 local addr 0:0:0:0:0:0:0:1 -> <null>
+Apr  4 00:06:29 hostname-here ntpd[952]: receive: Unexpected origin timestamp 0xe414a8d1.82e825f5 does not match aorg 0xe414a8d5.82c50d8c from server@127.0.0.1 xmt 0xe414a8d1.e671d7c4
+Apr  4 09:30:01 hostname-here CRON[89278]: (root) CMD ([ -x /etc/init.d/anacron ] && if [ ! -d /run/systemd/system ]; then /usr/sbin/invoke-rc.d anacron start >/dev/null; fi)
+Apr  4 16:32:07 hostname-here NetworkManager[740]: <info>  [1617629527.1101] manager: NetworkManager state is now CONNECTED_GLOBAL
+Apr  4 22:00:45 hostname-here dbus-daemon[1094]: [session uid=1000 pid=1094] Successfully activated service 'io.github.celluloid_player.Celluloid'