Closed Fogapod closed 5 years ago
The docs should do a better job here I agree. Arsenic uses structlog so for now please check their documentation on how to control output.
Quick fix
def set_arsenic_log_level(level = logging.WARNING):
# Create logger
logger = logging.getLogger('arsenic')
# We need factory, to return application-wide logger
def logger_factory():
return logger
structlog.configure(logger_factory=logger_factory)
logger.setLevel(level)
I am encountering the same issue and can not manage to disable all logging to stdout even after reading the structlog manual. Is there a chance someone has the solution ?
I finally found the way to do it, it is actually quite simple (and present in the API doc):
service = services.Geckodriver(binary=GECKODRIVER, log_file=os.devnull)
In my case, I wanted to preserve logging by just trimming long values in methods like screenshot. This could be achieved by custom processor:
class DictTrimmerProcessor:
def __init__(self, max_chars=25) -> None:
self.max_chars = max_chars
self.block_length = max_chars // 2 - 1
def __call__(self, logger, method_name, event_dict):
for field in event_dict:
if isinstance(event_dict[field], dict):
val = deepcopy(event_dict[field]) # Copy so that original event_dict is not changed
for key in val:
if isinstance(val[key], str) and len(val[key]) > self.max_chars:
val[key] = f"{val[key][:self.block_length]}...{val[key][-self.block_length:]}"
event_dict[field] = val
return event_dict
def fix_arsenic_log():
processors = structlog.get_config().get("processors", [])
processors.insert(0, DictTrimmerProcessor())
structlog.configure(processors=processors)
Hope someone finds this helpful since this issue is first on google when searching for logging problems in arsenic.
Using Python 3.10.7 and arsenic 21.8 on Windows 10 here. The confusing part is that arsenic, geckodriver and Firefox all emit info logs to the console, so I had do to quite a few things to turn the noise off:
service = arsenic.services.Geckodriver(log_file=os.devnull)
browser = arsenic.browsers.Firefox(**{'moz:firefoxOptions': {'args': ['-headless', '-private'], 'log': {'level': 'warn'}}})
I hope this will help someone, and I hope the arsenic developers will give us an option to turn off the logs in future releases
Library prints a lot of information to stdout, full page code when navigating / making screenshots. It's not clear from documentation how to disable these logs