Skip to content

Commit f8a8a1f

Browse files
committed
handle invalid json in log
1 parent a1e59c4 commit f8a8a1f

File tree

2 files changed

+37
-18
lines changed

2 files changed

+37
-18
lines changed

src/opnsense/scripts/syslog/logformats/grafana.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,16 @@ def __init__(self, filename):
1010
def match(self, line):
1111
# need to check file name here otherwise it will fallback to another LogFormater
1212
# weird thing happen in FormatContainer.get_format that take first line match base on piority.
13-
if self._filename.find('grafana') == -1:
13+
if self._filename.find("grafana") == -1:
1414
return None
15-
if bool(line and not line.isspace()):
15+
try:
1616
return json.loads(line)
17+
except:
18+
if bool(line and not line.isspace()):
19+
self._parts["msg"] = line
20+
return True
21+
else:
22+
return None
1723

1824
def get_key(self, key):
1925
try:
@@ -23,17 +29,20 @@ def get_key(self, key):
2329

2430
def set_line(self, line):
2531
super().set_line(line)
26-
self._parts = json.loads(self._line)
32+
try:
33+
self._parts = json.loads(self._line)
34+
except:
35+
self._parts["msg"] = line
2736

2837
@property
2938
def timestamp(self):
30-
return self.get_key('t')
39+
return self.get_key("t")
3140

3241
@property
3342
def line(self):
34-
msg = self.get_key('msg')
35-
err = self.get_key('error')
36-
reason = self.get_key('reason')
43+
msg = self.get_key("msg")
44+
err = self.get_key("error")
45+
reason = self.get_key("reason")
3746
if err is not None:
3847
msg += ". Error: " + err
3948
if reason is not None:
@@ -42,11 +51,11 @@ def line(self):
4251

4352
@property
4453
def process_name(self):
45-
return self.get_key('logger')
54+
return self.get_key("logger")
4655

4756
@property
4857
def severity(self):
49-
level = self.get_key('level')
58+
level = self.get_key("level")
5059
if level == "info":
5160
return 6
5261
if level == "debug":

src/opnsense/scripts/syslog/logformats/promtail.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@ def __init__(self, filename):
1010
def match(self, line):
1111
# need to check file name here otherwise it will fallback to another LogFormater
1212
# weird thing happen in FormatContainer.get_format that take first line match base on piority.
13-
if self._filename.find('promtail') == -1:
13+
if self._filename.find("promtail") == -1:
1414
return None
15-
if bool(line and not line.isspace()):
15+
try:
1616
return json.loads(line)
17+
except:
18+
if bool(line and not line.isspace()):
19+
self._parts["msg"] = line
20+
return True
21+
else:
22+
return None
23+
1724

1825
def get_key(self, key):
1926
try:
@@ -23,17 +30,20 @@ def get_key(self, key):
2330

2431
def set_line(self, line):
2532
super().set_line(line)
26-
self._parts = json.loads(self._line)
33+
try:
34+
self._parts = json.loads(self._line)
35+
except:
36+
self._parts["msg"] = line
2737

2838
@property
2939
def timestamp(self):
30-
return self.get_key('ts')
40+
return self.get_key("ts")
3141

3242
@property
3343
def line(self):
34-
msg = self.get_key('msg')
35-
err = self.get_key('err')
36-
reason = self.get_key('reason')
44+
msg = self.get_key("msg")
45+
err = self.get_key("err")
46+
reason = self.get_key("reason")
3747
if err is not None:
3848
msg += ". Error: " + err
3949
if reason is not None:
@@ -42,11 +52,11 @@ def line(self):
4252

4353
@property
4454
def process_name(self):
45-
self.get_key('caller')
55+
self.get_key("caller")
4656

4757
@property
4858
def severity(self):
49-
level = self.get_key('level')
59+
level = self.get_key("level")
5060
if level == "info":
5161
return 6
5262
if level == "debug":

0 commit comments

Comments
 (0)