Make logging optional (#122)

This commit is contained in:
Eugene Glybin 2023-10-17 15:45:45 +05:00 committed by GitHub
parent 704c998ff9
commit f54d80766c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 29 additions and 8 deletions

View file

@ -102,6 +102,8 @@ Options:
--backlog INTEGER RANGE Maximum number of connections to hold in
backlog. [env var: GRANIAN_BACKLOG;
default: 1024; x>=128]
--log / --no-log Enable logging [env var:
GRANIAN_LOG_ENABLED; default: (enabled)]
--log-level [critical|error|warning|warn|info|debug]
Log level [env var: GRANIAN_LOG_LEVEL;
default: info]

View file

@ -33,6 +33,7 @@ def main(
loop: Loops = typer.Option(Loops.auto.value, help='Event loop implementation'),
loop_opt: bool = typer.Option(False, '--opt/--no-opt', help='Enable loop optimizations', show_default='disabled'),
backlog: int = typer.Option(1024, min=128, help='Maximum number of connections to hold in backlog.'),
log_enabled: bool = typer.Option(True, '--log/--no-log', help='Enable logging', show_default='enabled'),
log_level: LogLevels = typer.Option(LogLevels.info.value, help='Log level', case_sensitive=False),
log_config: Optional[Path] = typer.Option(
None, help='Logging configuration file (json)', exists=True, file_okay=True, dir_okay=False, readable=True
@ -79,6 +80,7 @@ def main(
http=http,
websockets=websockets,
backlog=backlog,
log_enabled=log_enabled,
log_level=log_level,
log_dictconfig=log_dictconfig,
ssl_cert=ssl_certificate,

View file

@ -26,7 +26,6 @@ log_levels_map = {
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': False,
'root': {'level': 'INFO', 'handlers': ['console']},
'formatters': {
'generic': {
'()': 'logging.Formatter',
@ -35,14 +34,21 @@ LOGGING_CONFIG = {
}
},
'handlers': {'console': {'formatter': 'generic', 'class': 'logging.StreamHandler', 'stream': 'ext://sys.stdout'}},
'loggers': {'_granian': {'handlers': ['console'], 'level': 'INFO', 'propagate': False}},
}
logger = logging.getLogger()
# NOTE: to be consistent with the Rust module logger name
logger = logging.getLogger('_granian')
def configure_logging(level: LogLevels, config: Optional[Dict[str, Any]] = None):
def configure_logging(level: LogLevels, config: Optional[Dict[str, Any]] = None, enabled: bool = True):
log_config = copy.deepcopy(LOGGING_CONFIG)
if config:
log_config.update(config)
log_config['root']['level'] = log_levels_map[level]
log_config['loggers']['_granian']['level'] = log_levels_map[level]
logging.config.dictConfig(log_config)
if not enabled:
logger.setLevel(logging.CRITICAL + 1)

View file

@ -43,6 +43,7 @@ class Granian:
websockets: bool = True,
backlog: int = 1024,
http1_buffer_size: int = 65535,
log_enabled: bool = True,
log_level: LogLevels = LogLevels.info,
log_dictconfig: Optional[Dict[str, Any]] = None,
ssl_cert: Optional[Path] = None,
@ -64,11 +65,14 @@ class Granian:
self.websockets = websockets
self.backlog = max(128, backlog)
self.http1_buffer_size = http1_buffer_size
self.log_enabled = log_enabled
self.log_level = log_level
self.log_config = log_dictconfig
self.url_path_prefix = url_path_prefix
self.reload_on_changes = reload
configure_logging(self.log_level, self.log_config)
configure_logging(self.log_level, self.log_config, self.log_enabled)
self.build_ssl_context(ssl_cert, ssl_key)
self._shd = None
self._sfd = None
@ -101,6 +105,7 @@ class Granian:
http1_buffer_size,
websockets,
loop_opt,
log_enabled,
log_level,
log_config,
ssl_ctx,
@ -108,7 +113,8 @@ class Granian:
):
from granian._loops import loops, set_loop_signals
configure_logging(log_level, log_config)
configure_logging(log_level, log_config, log_enabled)
loop = loops.get(loop_impl)
sfd = socket.fileno()
callback = callback_loader()
@ -144,6 +150,7 @@ class Granian:
http1_buffer_size,
websockets,
loop_opt,
log_enabled,
log_level,
log_config,
ssl_ctx,
@ -151,7 +158,8 @@ class Granian:
):
from granian._loops import loops, set_loop_signals
configure_logging(log_level, log_config)
configure_logging(log_level, log_config, log_enabled)
loop = loops.get(loop_impl)
sfd = socket.fileno()
target = callback_loader()
@ -187,6 +195,7 @@ class Granian:
http1_buffer_size,
websockets,
loop_opt,
log_enabled,
log_level,
log_config,
ssl_ctx,
@ -194,7 +203,8 @@ class Granian:
):
from granian._loops import loops, set_loop_signals
configure_logging(log_level, log_config)
configure_logging(log_level, log_config, log_enabled)
loop = loops.get(loop_impl)
sfd = socket.fileno()
callback = callback_loader()
@ -228,6 +238,7 @@ class Granian:
self.http1_buffer_size,
self.websockets,
self.loop_opt,
self.log_enabled,
self.log_level,
self.log_config,
self.ssl_ctx,