Skip to content
Open

v1 #1

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,11 @@ Run with `python -m src`. No environment is needed.
Logging here is configured to do the following:

1. Logs from the last run are saved in `logs` folder. Whereas accumulated historical logs are in `history_logs` folder.
2. Main logs are logged into `src.log` file, and logs with detailed information from auxiliary modules can be found in the correcponding `src.{module_name}.log` files. Both, main and detailed logs are streamed into `stdout`.
2. Main logs are logged into `src.log` file, and logs with detailed information from auxiliary modules can be found in the auxiliary (detailed) log files. Both, main and detailed logs are streamed into `stdout`.


Followed the exampled from here https://docs.python.org/3/howto/logging-cookbook.html#using-logging-in-multiple-modules.

Минусы этого решения:
1. В консоль печатается лог "NEW RUN" во время импорта вспомогательных модулей.
2. В файлах `.log` вспомогательных модулей не всегда на будет понятно, из какого места была вызвана функция библиотеки.
106 changes: 106 additions & 0 deletions history_logs/src.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
2021-05-19 15:22:37,223 - src - __main__ - <module> - 11 - DEBUG - Calling module function.
2021-05-19 15:22:37,223 - src - __main__ - <module> - 16 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 13, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 8, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 15:30:53,985 - src - __main__ - <module> - 11 - DEBUG - Calling module function.
2021-05-19 15:30:53,987 - src - __main__ - <module> - 16 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 13, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 8, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 15:31:35,165 - src - __main__ - <module> - 11 - DEBUG - Calling module function.
2021-05-19 15:31:35,166 - src - __main__ - <module> - 16 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 13, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 8, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 16:08:33,766 - src - __main__ - <module> - 11 - DEBUG - Calling module function.
2021-05-19 16:08:33,767 - src - __main__ - <module> - 16 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 13, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 8, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 16:24:07,110 - src - __main__ - <module> - 5 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:24:07,111 - src - __main__ - <module> - 7 - DEBUG - Calling module function.
2021-05-19 16:24:07,148 - src - __main__ - <module> - 12 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 9, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 9, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 16:33:35,721 - src - __main__ - <module> - 5 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:33:35,722 - src - __main__ - <module> - 7 - DEBUG - Calling module function.
2021-05-19 16:33:35,722 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:33:35,723 - src - __main__ - <module> - 12 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 9, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 9, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 16:36:02,772 - src - __main__ - <module> - 5 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:36:02,772 - src - __main__ - <module> - 7 - DEBUG - Calling module function.
2021-05-19 16:36:02,772 - src - __main__ - <module> - 12 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 9, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 9, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 16:42:20,020 - src - __main__ - <module> - 18 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:42:20,020 - src - __main__ - <module> - 20 - DEBUG - Calling module function.
2021-05-19 16:42:20,020 - src - __main__ - <module> - 25 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 22, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 9, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 17:10:39,748 - src - __main__ - <module> - 12 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:10:39,751 - src - __main__ - <module> - 16 - DEBUG - Calling module function.
2021-05-19 17:10:39,751 - src - __main__ - <module> - 21 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 18, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 13, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 17:17:56,727 - src - __main__ - <module> - 12 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:17:56,731 - src - __main__ - <module> - 16 - DEBUG - Calling module function.
2021-05-19 17:17:56,732 - src - __main__ - <module> - 21 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 18, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 13, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-19 17:18:32,590 - src - __main__ - <module> - 12 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:18:32,592 - src - __main__ - <module> - 16 - DEBUG - Calling module function.
2021-05-19 17:18:32,593 - src - __main__ - <module> - 21 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 18, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 13, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2021-05-20 20:12:41,961 - src - __main__ - <module> - 8 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-20 20:13:32,940 - src - __main__ - <module> - 8 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-20 20:13:32,987 - src - __main__ - <module> - 12 - DEBUG - Calling module function.
2021-05-20 20:13:32,991 - src - __main__ - <module> - 17 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 14, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 11, in multiply
return num1 / num2
ZeroDivisionError: division by zero
32 changes: 32 additions & 0 deletions history_logs/src.module.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
2021-05-19 15:22:37,223 - src.module - module - multiply - 7 - DEBUG - Executing multiply function.
2021-05-19 15:30:53,986 - src.module - module - multiply - 7 - DEBUG - Executing multiply function.
2021-05-19 15:31:35,166 - src.module - module - multiply - 7 - DEBUG - Executing multiply function.
2021-05-19 16:08:33,767 - src.module - module - multiply - 7 - DEBUG - Executing multiply function.
2021-05-19 16:24:07,108 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:24:07,112 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:33:35,720 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:33:35,722 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:36:02,771 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:36:02,772 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:42:20,020 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:46:42,498 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:47:56,309 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:48:15,874 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:50:00,451 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:51:34,576 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:53:04,691 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:53:04,692 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 16:59:00,346 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 16:59:00,347 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 17:05:12,803 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:05:12,803 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 17:05:53,455 - src.module - module - <module> - 4 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:05:53,456 - src.module - module - multiply - 8 - DEBUG - Executing multiply function.
2021-05-19 17:10:39,750 - src.module - module - <module> - 8 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:10:39,751 - src.module - module - multiply - 12 - DEBUG - Executing multiply function.
2021-05-19 17:17:56,730 - src.module - module - <module> - 8 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:17:56,732 - src.module - module - multiply - 12 - DEBUG - Executing multiply function.
2021-05-19 17:18:32,592 - src.module - module - <module> - 8 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-19 17:18:32,592 - src.module - module - multiply - 12 - DEBUG - Executing multiply function.
2021-05-20 20:13:32,985 - src.module - module - <module> - 6 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-20 20:13:32,988 - src.module - module - multiply - 10 - DEBUG - Executing multiply function.
9 changes: 9 additions & 0 deletions logs/src.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
2021-05-20 20:13:32,940 - src - __main__ - <module> - 8 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-20 20:13:32,987 - src - __main__ - <module> - 12 - DEBUG - Calling module function.
2021-05-20 20:13:32,991 - src - __main__ - <module> - 17 - ERROR - division by zero
Traceback (most recent call last):
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\__main__.py", line 14, in <module>
module.multiply(5, 0)
File "C:\Users\user\Desktop\ML_work\1fc1e6bc02e1c6ce7e5ac523fed9568f\src\module.py", line 11, in multiply
return num1 / num2
ZeroDivisionError: division by zero
2 changes: 2 additions & 0 deletions logs/src.module.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
2021-05-20 20:13:32,985 - src.module - module - <module> - 6 - INFO - ------------------------- NEW RUN --------------------------------------
2021-05-20 20:13:32,988 - src.module - module - multiply - 10 - DEBUG - Executing multiply function.
Empty file added src/__init__.py
Empty file.
17 changes: 17 additions & 0 deletions src/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@

from src import utils

logger = utils.configure_logger('src')



logger.info('------------------------- NEW RUN --------------------------------------')

from src import module

logger.debug('Calling module function.')
try:
module.multiply(5, 0)
logger.debug('Finished.')
except Exception as ex:
logger.exception(ex)
6 changes: 6 additions & 0 deletions src/config.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import logging

APP_LOGGER_NAME = 'My_App'
LOGGING_LEVEL = logging.DEBUG
log_formatter = logging.Formatter("%(asctime)s - %(name)s - %(module)s - %(funcName)s - "
"%(lineno)d - %(levelname)s - %(message)s")
13 changes: 13 additions & 0 deletions src/module.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from src import utils

logger = utils.configure_logger(__name__)


logger.info('------------------------- NEW RUN --------------------------------------')


def multiply(num1, num2): # just multiply two numbers
logger.debug("Executing multiply function.")
return num1 / num2

# multiply(5, 1)
41 changes: 41 additions & 0 deletions src/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import logging
import sys

from src.config import log_formatter, LOGGING_LEVEL


def configure_logger(name, level=LOGGING_LEVEL):
"""
Вообще,
Child loggers propagate messages up to the handlers associated with their ancestor loggers.
Because of this, it is unnecessary to define and configure handlers for all the loggers an application uses.
It is sufficient to configure handlers for a top-level logger and create child loggers as needed.
(You can, however, turn off propagation by setting the propagate attribute of a logger to False.)
Но так как я не хочу чтобы логи детей записывались туда же куда и лог главного логгера, то я ставлю proagate=False и
настраиваю их заново.

:param name: str
:return:
"""

logger = logging.getLogger(name)
logger.setLevel(level)
logger.propagate = False
logger.handlers.clear() # строчка не нужна если я только в одном месте делаю setup_applevel_logger(logger_name=APP_LOGGER_NAME)?

sh = logging.StreamHandler(sys.stdout)
sh.setFormatter(log_formatter)
logger.addHandler(sh)

# file with current logs
fh = logging.FileHandler(f"logs/{logger.name}.log", mode='w')
# потому что handler-ы не наследуются от логгеров-родителей когда propagate=False,
# да и название файла было бы другое
fh.setFormatter(log_formatter)
logger.addHandler(fh)

# file with all the historical logs
fh = logging.FileHandler(f"history_logs/{logger.name}.log", mode='a')
fh.setFormatter(log_formatter)
logger.addHandler(fh)
return logger