Skip to content

Commit d934523

Browse files
authored
CM-27145 - Add setting of logger level for all loggers; fix stream of loggers; fix setting of logger level from env (#162)
1 parent 7de199a commit d934523

File tree

4 files changed

+40
-31
lines changed

4 files changed

+40
-31
lines changed

cycode/cli/code_scanner.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,13 @@
3333
load_json,
3434
)
3535
from cycode.cli.utils.progress_bar import ProgressBarSection
36-
from cycode.cli.utils.progress_bar import logger as progress_bar_logger
3736
from cycode.cli.utils.scan_batch import run_parallel_batched_scan
3837
from cycode.cli.utils.scan_utils import set_issue_detected
3938
from cycode.cli.utils.string_utils import get_content_size, is_binary_content
4039
from cycode.cli.utils.task_timer import TimeoutAfter
4140
from cycode.cli.zip_file import InMemoryZip
4241
from cycode.cyclient import logger
42+
from cycode.cyclient.config import set_logging_level
4343
from cycode.cyclient.models import Detection, DetectionSchema, DetectionsPerFile, ZippedFileScanResult
4444

4545
if TYPE_CHECKING:
@@ -1399,9 +1399,7 @@ def perform_post_pre_receive_scan_actions(context: click.Context) -> None:
13991399

14001400
def enable_verbose_mode(context: click.Context) -> None:
14011401
context.obj['verbose'] = True
1402-
# TODO(MarshalX): rework setting the log level for loggers
1403-
logger.setLevel(logging.DEBUG)
1404-
progress_bar_logger.setLevel(logging.DEBUG)
1402+
set_logging_level(logging.DEBUG)
14051403

14061404

14071405
def is_verbose_mode_requested_in_pre_receive_scan() -> bool:

cycode/cli/consts.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@
112112
TIMEOUT_ENV_VAR_NAME = 'TIMEOUT'
113113
CYCODE_CLI_REQUEST_TIMEOUT_ENV_VAR_NAME = 'CYCODE_CLI_REQUEST_TIMEOUT'
114114
LOGGING_LEVEL_ENV_VAR_NAME = 'LOGGING_LEVEL'
115-
# use only for dev envs locally
116-
BATCH_SIZE_ENV_VAR_NAME = 'BATCH_SIZE'
117115
VERBOSE_ENV_VAR_NAME = 'CYCODE_CLI_VERBOSE'
118116

119117
CYCODE_CONFIGURATION_DIRECTORY: str = '.cycode'

cycode/cli/main.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@
2222
from cycode.cli.user_settings.user_settings_commands import add_exclusions, set_credentials
2323
from cycode.cli.utils import scan_utils
2424
from cycode.cli.utils.progress_bar import get_progress_bar
25-
from cycode.cli.utils.progress_bar import logger as progress_bar_logger
26-
from cycode.cyclient import logger
25+
from cycode.cyclient.config import set_logging_level
2726
from cycode.cyclient.cycode_client_base import CycodeClientBase
2827
from cycode.cyclient.models import UserAgentOptionScheme
2928
from cycode.cyclient.scan_config.scan_config_creator import create_scan_client
@@ -228,10 +227,8 @@ def main_cli(
228227

229228
verbose = verbose or configuration_manager.get_verbose_flag()
230229
context.obj['verbose'] = verbose
231-
# TODO(MarshalX): rework setting the log level for loggers
232-
log_level = logging.DEBUG if verbose else logging.INFO
233-
logger.setLevel(log_level)
234-
progress_bar_logger.setLevel(log_level)
230+
if verbose:
231+
set_logging_level(logging.DEBUG)
235232

236233
context.obj['output'] = output
237234
if output == 'json':

cycode/cyclient/config.py

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -6,17 +6,21 @@
66

77
from cycode.cli import consts
88
from cycode.cli.user_settings.configuration_manager import ConfigurationManager
9+
from cycode.cyclient.config_dev import DEV_MODE_ENV_VAR_NAME, DEV_TENANT_ID_ENV_VAR_NAME
910

10-
# set io encoding (for windows)
11-
from .config_dev import DEV_MODE_ENV_VAR_NAME, DEV_TENANT_ID_ENV_VAR_NAME
1211

13-
sys.stdout.reconfigure(encoding='UTF-8')
14-
sys.stderr.reconfigure(encoding='UTF-8')
12+
def _set_io_encodings() -> None:
13+
# set io encoding (for Windows)
14+
sys.stdout.reconfigure(encoding='UTF-8')
15+
sys.stderr.reconfigure(encoding='UTF-8')
16+
17+
18+
_set_io_encodings()
1519

1620
# logs
1721
logging.basicConfig(
18-
stream=sys.stdout,
19-
level=logging.DEBUG,
22+
stream=sys.stderr,
23+
level=logging.INFO,
2024
format='%(asctime)s [%(name)s] %(levelname)s: %(message)s',
2125
datefmt='%Y-%m-%d %H:%M:%S',
2226
)
@@ -34,19 +38,28 @@
3438
consts.TIMEOUT_ENV_VAR_NAME: 300,
3539
consts.LOGGING_LEVEL_ENV_VAR_NAME: logging.INFO,
3640
DEV_MODE_ENV_VAR_NAME: 'False',
37-
consts.BATCH_SIZE_ENV_VAR_NAME: 20,
3841
}
3942

4043
configuration = dict(DEFAULT_CONFIGURATION, **os.environ)
4144

45+
_CREATED_LOGGERS = set()
46+
4247

4348
def get_logger(logger_name: Optional[str] = None) -> logging.Logger:
44-
logger = logging.getLogger(logger_name)
45-
level = _get_val_as_string(consts.LOGGING_LEVEL_ENV_VAR_NAME)
46-
level = level if level in logging._nameToLevel else int(level)
47-
logger.setLevel(level)
49+
config_level = _get_val_as_string(consts.LOGGING_LEVEL_ENV_VAR_NAME)
50+
level = logging.getLevelName(config_level)
51+
52+
new_logger = logging.getLogger(logger_name)
53+
new_logger.setLevel(level)
54+
55+
_CREATED_LOGGERS.add(new_logger)
4856

49-
return logger
57+
return new_logger
58+
59+
60+
def set_logging_level(level: int) -> None:
61+
for created_logger in _CREATED_LOGGERS:
62+
created_logger.setLevel(level)
5063

5164

5265
def _get_val_as_string(key: str) -> str:
@@ -66,15 +79,20 @@ def _get_val_as_int(key: str) -> Optional[int]:
6679
return None
6780

6881

69-
logger = get_logger('cycode cli')
82+
def _is_valid_url(url: str) -> bool:
83+
try:
84+
urlparse(url)
85+
return True
86+
except ValueError as e:
87+
logger.warning(f'Invalid cycode api url: {url}, using default value', e)
88+
return False
7089

90+
91+
logger = get_logger('cycode cli')
7192
configuration_manager = ConfigurationManager()
7293

7394
cycode_api_url = configuration_manager.get_cycode_api_url()
74-
try:
75-
urlparse(cycode_api_url)
76-
except ValueError as e:
77-
logger.warning(f'Invalid cycode api url: {cycode_api_url}, using default value', e)
95+
if not _is_valid_url(cycode_api_url):
7896
cycode_api_url = consts.DEFAULT_CYCODE_API_URL
7997

8098
timeout = _get_val_as_int(consts.CYCODE_CLI_REQUEST_TIMEOUT_ENV_VAR_NAME)
@@ -83,5 +101,3 @@ def _get_val_as_int(key: str) -> Optional[int]:
83101

84102
dev_mode = _get_val_as_bool(DEV_MODE_ENV_VAR_NAME)
85103
dev_tenant_id = _get_val_as_string(DEV_TENANT_ID_ENV_VAR_NAME)
86-
batch_size = _get_val_as_int(consts.BATCH_SIZE_ENV_VAR_NAME)
87-
verbose = _get_val_as_bool(consts.VERBOSE_ENV_VAR_NAME)

0 commit comments

Comments
 (0)