This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: Sane default for logging config
Type: enhancement Stage: resolved
Components: Library (Lib) Versions: Python 3.5
process
Status: closed Resolution: later
Dependencies: Superseder:
Assigned To: Nosy List: eric.snow, guettli, terry.reedy, vinay.sajip
Priority: normal Keywords:

Created on 2014-05-13 13:32 by guettli, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Messages (7)
msg218453 - (view) Author: Thomas Guettler (guettli) * Date: 2014-05-13 13:32
Imagine you write a small console script which is implemented like a library.

This tool has to do two things: the console script needs to configure the logging, and the library needs to use it.

The library usage of logging it easy well documented:

{{{
logger=logging.getLogger(__name__)
}}}

But the part in the console script has no sane default in the python world. 

I know how to set up the logging config with BasicConfig, DictConfig, ...

There needs to be something like DefaultConfig() which reads its config from well known places. 

This bug report is not about clever code solutions. It is about a sane and easy default agreement on how to load the logging configuration.
msg218488 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2014-05-13 22:38
Who decides what's sane and what isn't? You seem to be asking for something, but you don't seem to have a concrete proposal.

Are there "sane" defaults in other worlds than the Python world? What are they?
msg218499 - (view) Author: Thomas Guettler (guettli) * Date: 2014-05-14 04:57
Thank you for reading and replying. 

Yes, I wrote no concret proposal up to now.

I have this solutions in mind:

logging.config.defaultConfig()

Related https://docs.python.org/2/library/logging.config.html


Loading a python module:
------------------------

load a module "loggingconfig" this module gets imported like any other python module. It is like django loads its settings. It could be possible to check the environment variable LOGGINGCONFIG first. It could contain a string which defaults to "loggingconfig".

This module has a method "set_up()" which sets up the logging for this environment.


Loading from a file:
---------------------

A file searched in this places:

- CWD/.loggingconfig.conf
- VIRTUAL_ENV/.loggingconfig.conf
- HOME/.loggingconfig.conf
- etc/loggingconfig.conf

The file gets loaded with fileConfig()


Module or file config loading
-----------------------------

I think the module loading is better than the file based solution. That's why I think it should be done first. If there is no module found, the file loading should be tried.

If not config found
--------------------

If not config was found, default gets set.

My proposal:
 - loglevel is set to INFO. (Debug gets suppressed)
 - format: '%(asctime)s %(name)s: %(levelname)-8s [%(process)d] %(message)s'
 - logging goes to stdout

---------------------------

What is the best way to get this into the python standard library? Should I create a PEP?
msg218514 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2014-05-14 09:58
Just on backward compatibility grounds, a proposal like this isn't going to be acceptable on python-dev, I believe, and I'm not even sure it's necessary to have such a thing in the stdlib: why not just use the approach you suggested for your own projects, and leave it at that? I've certainly found that preferences for configuration approaches vary a lot across people, and nothing will please everyone :-(

Generally, before writing a PEP, ideas are broached on the python-ideas mailing list, then move to the python-dev mailing list when they seem to have enough mileage to do so, and the PEP discussion / life-cycle happens there.
msg218552 - (view) Author: Eric Snow (eric.snow) * (Python committer) Date: 2014-05-14 16:20
FWIW, I agree with Vinay.
msg218677 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2014-05-16 19:06
Moving discussion to python-ideas was the right thing to do. I am closing this for the present as there is no concrete accepted idea to write a patch for. Thomas, if that changes, you can re-open.
msg218748 - (view) Author: Thomas Guettler (guettli) * Date: 2014-05-18 17:15
Just for the record.

Here are the discussions about this topic on the python-ideas mailing list:


https://mail.python.org/pipermail/python-ideas/2014-May/027839.html

https://mail.python.org/pipermail/python-ideas/2014-May/027858.html
History
Date User Action Args
2022-04-11 14:58:03adminsetgithub: 65694
2014-05-18 17:15:38guettlisetmessages: + msg218748
2014-05-16 19:06:22terry.reedysetstatus: open -> closed

nosy: + terry.reedy
messages: + msg218677

resolution: later
stage: test needed -> resolved
2014-05-16 18:59:45terry.reedysetstage: test needed
type: enhancement
components: + Library (Lib)
versions: + Python 3.5
2014-05-14 16:20:48eric.snowsetnosy: + eric.snow
messages: + msg218552
2014-05-14 09:58:51vinay.sajipsetmessages: + msg218514
2014-05-14 04:57:14guettlisetmessages: + msg218499
2014-05-13 22:38:47vinay.sajipsetmessages: + msg218488
2014-05-13 20:40:33ned.deilysetnosy: + vinay.sajip
2014-05-13 13:32:56guettlicreate