diff --git a/README.md b/README.md index b817cb9a..5d57e3ab 100644 --- a/README.md +++ b/README.md @@ -267,6 +267,26 @@ from webdriver_manager.chrome import ChromeDriverManager ChromeDriverManager("2.26", cache_valid_range=1).install() ``` +--- + +### Custom Logger + +If you need to use a custom logger, you can create a logger and set it with `set_logger()`. + +```python +import logging +from webdriver_manager.core.logger import set_logger + +logger = logging.getLogger("custom_logger") +logger.setLevel(logging.DEBUG) +logger.addHandler(logging.StreamHandler()) +logger.addHandler(logging.FileHandler("custom.log")) + +set_logger(logger) +``` + +--- + ### Custom HTTP Client If you need to add custom HTTP logic like session or proxy you can define your custom HttpClient implementation. @@ -298,6 +318,8 @@ def test_can_get_chrome_driver_with_custom_http_client(): assert os.path.exists(path) ``` +--- + This will make your test automation more elegant and robust! Cheers diff --git a/tests/test_custom_logger.py b/tests/test_custom_logger.py new file mode 100644 index 00000000..f33ffb27 --- /dev/null +++ b/tests/test_custom_logger.py @@ -0,0 +1,41 @@ +"""tests.test_custom_logger.py""" + +import logging + +import pytest + +from webdriver_manager.core.logger import log, set_logger, __logger + +# Cache the old logger to restore it later +__old_logger = __logger + + +@pytest.fixture +def create_logger(): + """Create a logger.""" + + # Create a Custom Debug Logger + logger = logging.getLogger("WDM-DEBUG") + logger.setLevel(logging.DEBUG) + logger.addHandler(logging.StreamHandler()) + + return logger + + +def test_custom_logger(capsys, create_logger): + """Test the custom logger.""" + + # Set the custom logger + set_logger(create_logger) + + # send a log message + log_msg = "This is a test log message from the custom logger" + log(log_msg) + + # Check if the log message is in the output + captured = capsys.readouterr() + assert log_msg in captured.err + capsys.close() + + # Restore the old logger + set_logger(__old_logger) diff --git a/webdriver_manager/core/logger.py b/webdriver_manager/core/logger.py index e57b76d8..2a300fe4 100644 --- a/webdriver_manager/core/logger.py +++ b/webdriver_manager/core/logger.py @@ -9,3 +9,24 @@ def log(text): """Emitting the log message.""" __logger.log(wdm_log_level(), text) + + +def set_logger(logger): + """ + Set the global logger. + + Parameters + ---------- + logger : logging.Logger + The custom logger to use. + + Returns None + """ + + # Check if the logger is a valid logger + if not isinstance(logger, logging.Logger): + raise ValueError("The logger must be an instance of logging.Logger") + + # Bind the logger input to the global logger + global __logger + __logger = logger