this post was submitted on 25 Mar 2024
2 points (100.0% liked)

Python

6325 readers
216 users here now

Welcome to the Python community on the programming.dev Lemmy instance!

📅 Events

PastNovember 2023

October 2023

July 2023

August 2023

September 2023

🐍 Python project:
💓 Python Community:
✨ Python Ecosystem:
🌌 Fediverse
Communities
Projects
Feeds

founded 1 year ago
MODERATORS
 

Hi, I'm currently using this to log my python process

logging.basicConfig(filename='filename.log', level=logging.DEBUG)

logger = logging.getLogger()

sys.stderr.write = logger.error

sys.stdout.write = logger.info

And then using print(f'{datetime.now()} log message') where I want to log.

It's working OK, buy I would like to live it to ic, but can't find any info on how to send the ic output to the logger.

Thanks for any help.

top 4 comments
sorted by: hot top controversial new old
[–] [email protected] 0 points 7 months ago (1 children)

Overwriting sys.stdout and sys.stderr seems like a Bad Idea™.

Browsing the icecream source code, it looks like you can do this:

logger = logging.getLogger()
ic.configureOutput(outputFunction=logger.debug)

And then just make sure the logger is configured to actually print at DEBUG level.

[–] [email protected] 0 points 7 months ago* (last edited 7 months ago) (1 children)

Thanks, tried the next

logging.basicConfig(filename='filename.log', level=logging.DEBUG)

logger = logging.getLogger()
ic.configureOutput(outputFunction=logger.debug)

ic('test')

But didn't create the log file and the output was printed on the screen and not on log file(that was never created anyway)

[–] [email protected] 0 points 7 months ago* (last edited 7 months ago)

Just to confirm, if you change ic('test') to logger.debug('test') it works as expected? I.e. it creates the log file?

Edit: Also if you change the output format of the logger and use it as the outputFunction to ic, does it include the customized format?

I just want to confirm if your ic is routing through the logger or not, to know if it's a problem with your logging config or with ic.

[–] [email protected] 0 points 7 months ago

Never used ic before, but there is an example in the README on GitHub.

>>> import logging
>>> from icecream import ic
>>>
>>> def warn(s):
>>>     logging.warning(s)
>>>
>>> ic.configureOutput(outputFunction=warn)
>>> ic('eep')
WARNING:root:ic| 'eep': 'eep'