Skip to content

Commit 0d5a4b7

Browse files
committed
fix: initialize separate logger for each module
1 parent bd43e29 commit 0d5a4b7

File tree

9 files changed

+75
-41
lines changed

9 files changed

+75
-41
lines changed

solnlib/conf_manager.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@
3636
InvalidHostnameError,
3737
)
3838

39+
from solnlib.log import Logs
40+
logger = Logs().get_logger(__name__)
41+
3942
__all__ = [
4043
"ConfFile",
4144
"ConfManager",
@@ -338,7 +341,7 @@ def delete(self, stanza_name: str):
338341
try:
339342
self._conf.delete(stanza_name)
340343
except KeyError:
341-
logging.error(
344+
logger.error(
342345
"Delete stanza: %s error: %s.", stanza_name, traceback.format_exc()
343346
)
344347
raise ConfStanzaNotExistException(

solnlib/file_monitor.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,10 @@
2424
import traceback
2525
from typing import Any, Callable, List
2626

27+
from solnlib.log import Logs
28+
logger = Logs().get_logger(__name__)
29+
30+
2731
__all__ = ["FileChangesChecker", "FileMonitor"]
2832

2933

@@ -45,7 +49,8 @@ def __init__(self, callback: Callable[[List[str]], Any], files: List):
4549
try:
4650
self.file_mtimes[k] = op.getmtime(k)
4751
except OSError:
48-
logging.debug(f"Getmtime for {k}, failed: {traceback.format_exc()}")
52+
logging.debug(f"Getmtime for {k}, failed: {traceback.format_exc()}") # deprecated
53+
logger.debug(f"Getmtime for {k}, failed: {traceback.format_exc()}")
4954

5055
def check_changes(self) -> bool:
5156
"""Check files change.
@@ -56,7 +61,7 @@ def check_changes(self) -> bool:
5661
Returns:
5762
True if files changed else False
5863
"""
59-
logging.debug(f"Checking files={self._files}")
64+
logger.debug(f"Checking files={self._files}")
6065
file_mtimes = self.file_mtimes
6166
changed_files = []
6267
for f, last_mtime in list(file_mtimes.items()):
@@ -65,7 +70,7 @@ def check_changes(self) -> bool:
6570
if current_mtime != last_mtime:
6671
file_mtimes[f] = current_mtime
6772
changed_files.append(f)
68-
logging.info(f"Detect {f} has changed", f)
73+
logger.info(f"Detect {f} has changed", f)
6974
except OSError:
7075
pass
7176
if changed_files:

solnlib/modular_input/checkpointer.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
import base64
2121
import json
22-
import logging
2322
import os
2423
import os.path as op
2524
import traceback
@@ -31,6 +30,9 @@
3130

3231
from solnlib import _utils, utils
3332

33+
from solnlib.log import Logs
34+
logger = Logs().get_logger(__name__)
35+
3436
__all__ = ["CheckpointerException", "KVStoreCheckpointer", "FileCheckpointer"]
3537

3638

@@ -178,7 +180,7 @@ def get(self, key: str) -> Optional[Any]:
178180
record = self._collection_data.query_by_id(key)
179181
except binding.HTTPError as e:
180182
if e.status != 404:
181-
logging.error(f"Get checkpoint failed: {traceback.format_exc()}.")
183+
logger.error(f"Get checkpoint failed: {traceback.format_exc()}.")
182184
raise
183185
return None
184186
return json.loads(record["state"])
@@ -199,7 +201,7 @@ def delete(self, key: str) -> None:
199201
self._collection_data.delete_by_id(key)
200202
except binding.HTTPError as e:
201203
if e.status != 404:
202-
logging.error(f"Delete checkpoint failed: {traceback.format_exc()}.")
204+
logger.error(f"Delete checkpoint failed: {traceback.format_exc()}.")
203205
raise
204206

205207

solnlib/modular_input/modinput.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
import traceback
2020

2121
import solnlib.splunkenv as sp
22-
import logging
22+
23+
from solnlib.log import Logs
24+
logger = Logs().get_logger(__name__)
2325

2426

2527
def _parse_modinput_configs(root, outer_block, inner_block):
@@ -62,7 +64,7 @@ def _parse_modinput_configs(root, outer_block, inner_block):
6264

6365
confs = root.getElementsByTagName(outer_block)
6466
if not confs:
65-
logging.error("Invalid config, missing %s section", outer_block)
67+
logger.error("Invalid config, missing %s section", outer_block)
6668
raise Exception(f"Invalid config, missing {outer_block} section")
6769

6870
configs = []
@@ -71,7 +73,7 @@ def _parse_modinput_configs(root, outer_block, inner_block):
7173
config = {}
7274
stanza_name = stanza.getAttribute("name")
7375
if not stanza_name:
74-
logging.error("Invalid config, missing name")
76+
logger.error("Invalid config, missing name")
7577
raise Exception("Invalid config, missing name")
7678

7779
config["name"] = stanza_name
@@ -107,13 +109,13 @@ def parse_modinput_configs(config_str):
107109
for tag in meta_configs.keys():
108110
nodes = doc.getElementsByTagName(tag)
109111
if not nodes:
110-
logging.error("Invalid config, missing %s section", tag)
112+
logger.error("Invalid config, missing %s section", tag)
111113
raise Exception("Invalid config, missing %s section", tag)
112114

113115
if nodes[0].firstChild and nodes[0].firstChild.nodeType == nodes[0].TEXT_NODE:
114116
meta_configs[tag] = nodes[0].firstChild.data
115117
else:
116-
logging.error("Invalid config, expect text ndoe")
118+
logger.error("Invalid config, expect text ndoe")
117119
raise Exception("Invalid config, expect text ndoe")
118120

119121
if doc.nodeName == "input":
@@ -140,7 +142,7 @@ def get_modinput_configs_from_cli(modinput, modinput_stanza=None):
140142
cli, stdout=subprocess.PIPE, stderr=subprocess.PIPE
141143
).communicate()
142144
if err:
143-
logging.error("Failed to get modinput configs with error: %s", err)
145+
logger.error("Failed to get modinput configs with error: %s", err)
144146
return None, None
145147
else:
146148
return parse_modinput_configs(out)
@@ -152,7 +154,7 @@ def get_modinput_config_str_from_stdin():
152154
try:
153155
return sys.stdin.read(5000)
154156
except Exception:
155-
logging.error(traceback.format_exc())
157+
logger.error(traceback.format_exc())
156158
raise
157159

158160

solnlib/modular_input/modular_input.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@
1616

1717
"""This module provides a base class of Splunk modular input."""
1818

19-
import logging
2019
import sys
2120
import traceback
2221
from abc import ABCMeta, abstractmethod
@@ -35,6 +34,9 @@
3534
from ..orphan_process_monitor import OrphanProcessMonitor
3635
from . import checkpointer, event_writer
3736

37+
from solnlib.log import Logs
38+
logger = Logs().get_logger(__name__)
39+
3840
__all__ = ["ModularInputException", "ModularInput"]
3941

4042

@@ -196,7 +198,7 @@ def _create_checkpointer(self):
196198
port=self.server_port,
197199
)
198200
except binding.HTTPError:
199-
logging.error(
201+
logger.error(
200202
"Failed to init kvstore checkpointer: %s.", traceback.format_exc()
201203
)
202204
raise
@@ -234,7 +236,7 @@ def _create_event_writer(self):
234236
global_settings_schema=self.hec_global_settings_schema,
235237
)
236238
except binding.HTTPError:
237-
logging.error(
239+
logger.error(
238240
"Failed to init HECEventWriter: %s.", traceback.format_exc()
239241
)
240242
raise
@@ -464,10 +466,10 @@ def execute(self):
464466
else:
465467
self.config_name = list(input_definition["inputs"].keys())[0]
466468
self.do_run(input_definition["inputs"])
467-
logging.info("Modular input: %s exit normally.", self.name)
469+
logger.info("Modular input: %s exit normally.", self.name)
468470
return 0
469471
except Exception:
470-
logging.error(
472+
logger.error(
471473
"Modular input: %s exit with exception: %s.",
472474
self.name,
473475
traceback.format_exc(),
@@ -490,7 +492,7 @@ def execute(self):
490492
self.do_validation(validation_definition["parameters"])
491493
return 0
492494
except Exception as e:
493-
logging.error(
495+
logger.error(
494496
"Modular input: %s validate arguments with exception: %s.",
495497
self.name,
496498
traceback.format_exc(),
@@ -501,7 +503,7 @@ def execute(self):
501503
sys.stderr.flush()
502504
return 1
503505
else:
504-
logging.error(
506+
logger.error(
505507
'Modular input: %s run with invalid arguments: "%s".',
506508
self.name,
507509
" ".join(sys.argv[1:]),

solnlib/rest.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,18 +23,21 @@
2323

2424
import logging
2525

26+
from solnlib.log import Logs, log_exception
27+
28+
logger = Logs().get_logger(__name__)
29+
2630

2731
def splunkd_request(
28-
splunkd_uri,
29-
session_key,
30-
method="GET",
31-
headers=None,
32-
data=None,
33-
timeout=300,
34-
retry=1,
35-
verify=False,
32+
splunkd_uri,
33+
session_key,
34+
method="GET",
35+
headers=None,
36+
data=None,
37+
timeout=300,
38+
retry=1,
39+
verify=False,
3640
) -> Optional[requests.Response]:
37-
3841
headers = headers if headers is not None else {}
3942
headers["Authorization"] = f"Splunk {session_key}"
4043
content_type = headers.get("Content-Type")
@@ -63,14 +66,17 @@ def splunkd_request(
6366
timeout=timeout,
6467
verify=verify,
6568
)
66-
except Exception:
67-
logging.error(msg_temp, splunkd_uri, "unknown", format_exc())
69+
except Exception as e:
70+
logging.error(msg_temp, splunkd_uri, "unknown", format_exc()) # deprecated
71+
log_exception(logger, e, exc_label="unknown",
72+
msg_before=f"Failed to send rest request={splunkd_uri}, errcode=unknown")
6873
else:
6974
if resp.status_code not in (200, 201):
7075
if not (method == "GET" and resp.status_code == 404):
7176
logging.debug(
7277
msg_temp, splunkd_uri, resp.status_code, code_to_msg(resp)
73-
)
78+
) # deprecated
79+
logger.debug(msg_temp, splunkd_uri, resp.status_code, code_to_msg(resp))
7480
else:
7581
return resp
7682
else:

solnlib/splunk_rest_client.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
calling splunklib SDK directly in business logic code.
2222
"""
2323

24-
import logging
2524
import os
2625
import sys
2726
import traceback
@@ -35,6 +34,9 @@
3534
from .net_utils import validate_scheme_host_port
3635
from .splunkenv import get_splunkd_access_info
3736

37+
from solnlib.log import Logs
38+
logger = Logs().get_logger(__name__)
39+
3840
__all__ = ["SplunkRestClient"]
3941
MAX_REQUEST_RETRIES = 5
4042

@@ -171,7 +173,7 @@ def request(url, message, **kwargs):
171173
**kwargs,
172174
)
173175
except Exception:
174-
logging.error(
176+
logger.error(
175177
"Failed to issue http request=%s to url=%s, error=%s",
176178
method,
177179
url,

solnlib/timer_queue.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@
2525

2626
import sortedcontainers as sc
2727

28+
from solnlib.log import Logs
29+
logger = Logs().get_logger(__name__)
30+
31+
2832
__all__ = ["Timer", "TimerQueueStruct", "TimerQueue"]
2933

3034

@@ -123,6 +127,9 @@ def remove_timer(self, timer: Timer):
123127
except ValueError:
124128
logging.info(
125129
"Timer=%s is not in queue, move it to cancelling " "list", timer.ident
130+
) # deprecated
131+
logger.info(
132+
"Timer=%s is not in queue, move it to cancelling " "list", timer.ident
126133
)
127134
else:
128135
self._cancelling_timers[timer.ident] = timer
@@ -184,7 +191,8 @@ def check_and_execute(self) -> float:
184191
try:
185192
timer()
186193
except Exception:
187-
logging.error(traceback.format_exc())
194+
logging.error(traceback.format_exc()) # deprecated
195+
logger.error(traceback.format_exc())
188196

189197
self.reset_timers(expired_timers)
190198
return _calc_sleep_time(next_expired_time)
@@ -231,7 +239,7 @@ def start(self):
231239
self._started = True
232240

233241
self._thr.start()
234-
logging.info("TimerQueue started.")
242+
logger.info("TimerQueue started.")
235243

236244
def stop(self):
237245
"""Stop the timer queue."""
@@ -284,7 +292,8 @@ def _check_and_execute(self):
284292
# Note, please make timer callback effective/short
285293
timer()
286294
except Exception:
287-
logging.error(traceback.format_exc())
295+
logging.error(traceback.format_exc()) # deprecated
296+
logger.error(traceback.format_exc())
288297

289298
self._reset_timers(expired_timers)
290299

@@ -295,7 +304,7 @@ def _check_and_execute(self):
295304
break
296305
except Queue.Empty:
297306
pass
298-
logging.info("TimerQueue stopped.")
307+
logger.info("TimerQueue stopped.")
299308

300309
def _get_expired_timers(self):
301310
with self._lock:

solnlib/utils.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
"""Common utilities."""
1818

1919
import datetime
20-
import logging
2120
import os
2221
import signal
2322
import time
@@ -26,6 +25,10 @@
2625
from typing import Any, Callable, List, Tuple, Union
2726
from urllib import parse as urlparse
2827

28+
29+
from solnlib.log import Logs
30+
logger = Logs().get_logger(__name__)
31+
2932
__all__ = [
3033
"handle_teardown_signals",
3134
"datetime_to_seconds",
@@ -152,7 +155,7 @@ def wrapper(*args, **kwargs):
152155
try:
153156
return func(*args, **kwargs)
154157
except Exception as e:
155-
logging.warning(
158+
logger.warning(
156159
"Run function: %s failed: %s.",
157160
func.__name__,
158161
traceback.format_exc(),

0 commit comments

Comments
 (0)