Skip to content

Commit 1146ed7

Browse files
Accumulate logs in a file so historic logs are easier to reference for comparisons (#55)
* Accumulate logs in a file so historic logs are easier to reference for comparisons
1 parent 4adea44 commit 1146ed7

File tree

4 files changed

+50
-6
lines changed

4 files changed

+50
-6
lines changed

cli/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,8 @@ data_path="./data"
114114
| Path to `loader.toml` | `--env-config` | `False` | `../config/loader.toml` | `String` | |
115115
| When loading each multi-part source, <br/>load all partitions (and shards) in one transaction | `--collapse-partitions-on-load` | `False` | `True` | `BooleanOptionalAction` | `True` - `--collapse-partitions-on-load`, `False` - `--no-collapse-partitions-on-load`, no argument - default value |
116116
| Logging level for cli | `--log-level` | `False` | `INFO` | `String` | `['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']` |
117+
| Log rotation option. If `date` options is enabled RWM rotates logs each day. If `size` option is enabled RWM rotates log file when it reaches this size | `--log-rotation` | `False` | `date` | `String` | `['date', 'size']` |
118+
| Rotation log file size in Mb. RWM rotates log file when it reaches this size and `--log-rotation` is `size | `--log-file-size` | `False` | `5` | `Int` | |
117119
| Drop database before workflow run, or not | `--drop-db` | `False` | `False` | `BooleanOptionalAction` | `True` - `--drop-db`, `False` - `--no-drop-db`, no argument - default value |
118120
| Remove RAI engine and database after run or not | `--cleanup-resources` | `False` | `False` | `BooleanOptionalAction` | `True` - `--cleanup-resources`, `False` - `--no-cleanup-resources`, no argument - default value |
119121
| Remove RAI engine after run or not | `--cleanup-engine` | `False` | `False` | `BooleanOptionalAction` | `True` - `--cleanup-engine`, `False` - `--no-cleanup-engine`, no argument - default value |

cli/args.py

+16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from argparse import ArgumentParser, Namespace, BooleanOptionalAction
2+
from cli.logger import LogRotationOption
23

34

45
def parse() -> Namespace:
@@ -84,6 +85,21 @@ def parse() -> Namespace:
8485
default="INFO",
8586
type=str
8687
)
88+
parser.add_argument(
89+
"--log-rotation",
90+
help="Log rotation option",
91+
choices=[LogRotationOption.DATE, LogRotationOption.SIZE],
92+
required=False,
93+
type=LogRotationOption,
94+
default=LogRotationOption.DATE
95+
)
96+
parser.add_argument(
97+
"--log-file-size",
98+
help="Rotation log file size in Mb. RWM rotates log file when it reaches this size",
99+
required=False,
100+
type=int,
101+
default=5 # 5 Mb
102+
)
87103
parser.add_argument(
88104
"--drop-db",
89105
help="Drop RAI database before run, or not",

cli/logger.py

+31-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,17 @@
11
import logging
2+
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler
3+
from workflow.common import BaseEnum
24

5+
log_filename = 'rwm.log'
36

4-
def configure(level=logging.INFO) -> logging.Logger:
7+
8+
class LogRotationOption(str, BaseEnum):
9+
DATE = 'date'
10+
SIZE = 'size'
11+
12+
13+
def configure(level=logging.INFO, rotation: LogRotationOption = LogRotationOption.DATE,
14+
log_file_size: int = 5) -> logging.Logger:
515
# override default logging level for azure
616
logger = logging.getLogger('azure.core')
717
logger.setLevel(logging.ERROR)
@@ -10,8 +20,24 @@ def configure(level=logging.INFO) -> logging.Logger:
1020

1121
logger = logging.getLogger()
1222
logger.setLevel(level)
13-
handler = logging.StreamHandler()
14-
formatter = logging.Formatter('[%(asctime)s][%(levelname)s][%(name)s] %(message)s', "%H:%M:%S")
15-
handler.setFormatter(formatter)
16-
logger.addHandler(handler)
23+
formatter = logging.Formatter('[%(asctime)s.%(msecs)03d][%(levelname)s][%(name)s] %(message)s', '%Y-%m-%d %H:%M:%S')
24+
25+
stream_handler = logging.StreamHandler()
26+
stream_handler.setFormatter(formatter)
27+
logger.addHandler(stream_handler)
28+
29+
if rotation == LogRotationOption.SIZE:
30+
max_log_size = log_file_size * 1024 * 1024 # covert to Mb
31+
size_rotation_handler = RotatingFileHandler(log_filename, maxBytes=max_log_size, backupCount=30,
32+
encoding='utf-8')
33+
size_rotation_handler.setFormatter(formatter)
34+
logger.addHandler(size_rotation_handler)
35+
logger.info("Log rotation by size is enabled")
36+
elif rotation == LogRotationOption.DATE:
37+
time_rotation_handler = TimedRotatingFileHandler(log_filename, when='midnight', interval=1, backupCount=30,
38+
encoding='utf-8')
39+
time_rotation_handler.setFormatter(formatter)
40+
logger.addHandler(time_rotation_handler)
41+
logger.info("Log rotation by date is enabled")
42+
1743
return logger.getChild("cli")

cli/runner.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def start():
1616
# parse arguments
1717
args = cli.args.parse()
1818
# configure logger
19-
logger = cli.logger.configure(logging.getLevelName(args.log_level))
19+
logger = cli.logger.configure(logging.getLevelName(args.log_level), args.log_rotation, args.log_file_size)
2020
try:
2121
with open(args.env_config, "rb") as fp:
2222
loader_config = tomli.load(fp)

0 commit comments

Comments
 (0)