homepage

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: Add Python command line flags to configure logging
Type: enhancement Stage:
Components: Interpreter Core, Library (Lib) Versions: Python 3.2, Python 2.7
process
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: Marc.Abramowitz, doughellmann, eric.araujo, eric.smith, exarkun, georg.brandl, michael.foord, ncoghlan, pitrou, r.david.murray, theller, vinay.sajip
Priority: normal Keywords: patch

Created on 2009年09月21日 11:23 by theller, last changed 2022年04月11日 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
logging.patch theller, 2009年09月21日 11:23 Proof of concept
Messages (25)
msg92932 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2009年09月21日 11:23
I want the Python executable to have command line flags which allow
simple configuration of the logging module. Use cases are to run
applications/scripts (which use libraries that use logging calls) with
different logging output without having to edit (ugly) logging config files.
The attached patch demonstrates the idea; it allows to run 'python -l
<options> ...' and passes <options> to a new function
logging._parse_python_options(<options>).
msg92945 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009年09月21日 16:59
I get the idea. The Python part of the patch demonstrates what you're
getting at, though it can't be used as is - for example the
getattr(logging, a, a) could lead to problems. However a more
intelligent parser (which looked for specific keywords recognised by
basicConfig(), and got the correct values accordingly) wouldn't be much
more complicated. (I'll look at enhancing this part.)
As for the changes to main.c - I am a C/C++ developer but have not made
any changes to Python C code so far - it would be good if a more
experienced committer reviews this part (not sure who - can someone
please reassign/add to nosy list)? Thanks.
msg92946 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2009年09月21日 17:15
> I get the idea. The Python part of the patch demonstrates what you're
> getting at, though it can't be used as is - for example the
> getattr(logging, a, a) could lead to problems. However a more
> intelligent parser (which looked for specific keywords recognised by
> basicConfig(), and got the correct values accordingly) wouldn't be much
> more complicated. (I'll look at enhancing this part.)
> 
> As for the changes to main.c - I am a C/C++ developer but have not made
> any changes to Python C code so far - it would be good if a more
> experienced committer reviews this part (not sure who - can someone
> please reassign/add to nosy list)? Thanks.
Both parts of the patch are only thought to demonstrate the idea.
You said you'll attack the Python part - good.
For the C part, the most prominemt things that are missing are these:
- free(logopt) should be called at the end of the 'if (logopts != NULL) {' block.
- error handling should be improved. Errors in this block should probably exit Python.
msg92947 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2009年09月21日 17:34
If you want to add flags to the main executable, it deserves a
discussion on python-dev IMO.
It could be obtained through an environment variable, e.g.
PYLOGGING_CONFIG; which has the nice side-effect of working for
executable scripts too.
msg92949 - (view) Author: Eric V. Smith (eric.smith) * (Python committer) Date: 2009年09月21日 18:23
The C code looks basically okay to me. I'd probably use strdup() instead
of the malloc/strlen/strcpy calls. And as Thomas said, the cleanup needs
a little bit of work.
msg92950 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2009年09月21日 18:31
Also possibly relevant was the recent python-dev discussion about
replicating (some of) the command line argument parsing in python so
that it can be used by things other than the 'python' command:
http://mail.python.org/pipermail/python-dev/2009-August/091484.html 
msg92952 - (view) Author: Georg Brandl (georg.brandl) * (Python committer) Date: 2009年09月21日 18:44
Also, don't forget to update the "python -h" help text.
msg92953 - (view) Author: Michael Foord (michael.foord) * (Python committer) Date: 2009年09月21日 18:47
Why does this need to be built into the interpreter? The script / app
should have logging config support.
msg92956 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2009年09月21日 20:16
> Why does this need to be built into the interpreter? The script / app
> should have logging config support.
It does not need to, but it would be nice.
I think the '-l' flag should be similar to the -W flag.
Or consider for example using unittest.main() as script/app.
msg92957 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009年09月21日 20:32
If we do include interpreter support, there should be an option to
invoke a configuration file, too:
-l config=path
Mutually exclusive with all the other options. So, you can either use it
to invoke basicConfig or to invoke an arbitrary configuration in a file.
Opinions?
msg92958 - (view) Author: Doug Hellmann (doughellmann) * (Python committer) Date: 2009年09月21日 20:45
I think I'm with Michael on this one. I'd rather add logging
configuration to any stdlib modules that support being run directly and
want to support logging.
msg92959 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2009年09月21日 20:58
I don't think this is about logging in stdlib modules that are run
directly. I think this is about a library that contains logging calls
(eg: multiprocessing), and is used in j-random-application, and while
prototyping/debugging the application you want to access that logging
information without having to write a logging infrastructure into your
app first. Or you want to access it while debugging someone _else_'s
application...
msg92960 - (view) Author: Jean-Paul Calderone (exarkun) * (Python committer) Date: 2009年09月21日 21:02
How about putting this into the logging module instead? Instead of
"python <logging options> <program> <program options>", making it
"python -m logging <logging options> <program> <program options".
This:
 * involves no changes to the core interpreter
 * only requires Python to be written, not C
 * Lets other VMs benefit from the feature immediately
 * Follows what seems to be the emerging convention for this kind of
(eg pdb, unittest)
 * Still allows logging to be configured for arbitrary programs that
wouldn't otherwise be configurable in this way
msg92961 - (view) Author: Doug Hellmann (doughellmann) * (Python committer) Date: 2009年09月21日 21:19
How do these "global" settings (either via the interpreter or a wrapper
in the logging module) change what an app might do on its own? IOW, if
my app is already written to configure logging, and someone invokes it
with these other settings, which settings are used?
msg92994 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009年09月22日 13:50
Both Doug and Jean-Paul have made good points, IMO.
msg93007 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2009年09月22日 19:01
> Jean-Paul Calderone:
> 
> How about putting this into the logging module instead? Instead of
> "python <logging options> <program> <program options>", making it
> "python -m logging <logging options> <program> <program options".
> 
> This:
> 
> * involves no changes to the core interpreter
> * only requires Python to be written, not C
> * Lets other VMs benefit from the feature immediately
> * Follows what seems to be the emerging convention for this kind of
> (eg pdb, unittest)
> * Still allows logging to be configured for arbitrary programs that
> wouldn't otherwise be configurable in this way
This is a very good idea, and fully covers my use case.
msg93008 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2009年09月22日 19:03
> How do these "global" settings (either via the interpreter or a wrapper
> in the logging module) change what an app might do on its own? IOW, if
> my app is already written to configure logging, and someone invokes it
> with these other settings, which settings are used?
IMO the same would happen as if logging.basicConfig() would have been called
followed by calls to the custom configuration.
msg93010 - (view) Author: Doug Hellmann (doughellmann) * (Python committer) Date: 2009年09月22日 19:30
@theller, I'm not sure what your point is. I'm asking what the defined
behavior is if we provide some sort of global way to run a program with
logging configured, and then that app turns around and tries to
reconfigure it. Should the last one to call the configuration
function(s) win, or the first?
I like the idea of adding this feature to the logging module better than
building it into the interpreter, but I still think it opens up areas
for unexpected behavior, and it would be better to just let each
application set up its own logging.
msg93012 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009年09月22日 19:45
@theller: Although your use case just covers using basicConfig, I can
just see users expecting the same mechanism to invoke configuration
stored in a logging configuration file, which is why I suggested the
config= variant. However, doughellmann raises the valid point of what
the semantics would be if the program you invoke via logging -m does its
own configuration.
With a simple implementation: If a script calls basicConfig after it has
been invoked with logging -m etc. then the basicConfig call won't do
anything, as if the root logger already has some handlers, the call is
essentially a no-op. If the called script loads a configuration file,
that will overwrite the configuration specified via logging -m.
Either way, it's not consistent IMO - sometimes the logging -m
configuration will seem to win, and other times, the called script's
configuration.
Of course, it could be argued that logging -m is intended for scripts
which don't do explicit configuration - I'm not sure of how strong an
argument this is.
Thinking caps on :-)
msg93013 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009年09月22日 19:46
Ummm, s/logging -m/-m logging/
msg93418 - (view) Author: Thomas Heller (theller) * (Python committer) Date: 2009年10月01日 18:35
I retract this request. It seems the idea is not liked or a solution is
not easy.
(The solution I now use is to start Python from a batch file that parses
some command line flags itself, sets environment variables, and my
sitecustomize.py file configures logging).
Thanks for the comments.
msg93425 - (view) Author: Vinay Sajip (vinay.sajip) * (Python committer) Date: 2009年10月01日 22:46
Ok. I think it's a reasonable request, but I can see that implementing
it naively without some further thought will lead to (justifiable)
complaints from some users that the behaviour is contradictory or
unintuitive in terms of which configuration "wins" in the event of
ambiguity.
msg127952 - (view) Author: Éric Araujo (eric.araujo) * (Python committer) Date: 2011年02月04日 23:34
I think Antoine’s envvar idea was a good one, similar to PYTHONWARNINGS.
msg261217 - (view) Author: Marc Abramowitz (Marc.Abramowitz) * Date: 2016年03月05日 17:55
I was just thinking that it would be nice if logging could be configured through environment variables. This would make it easier to have Python applications adhere to the Twelve-Factor methodology around application configuration:
http://12factor.net/config
Currently, applications need to handle this themselves, but I wonder if there's value in deciding on a best practice and providing for it at a lower level (the stdlib logging module).
msg261219 - (view) Author: Marc Abramowitz (Marc.Abramowitz) * Date: 2016年03月05日 18:08
I guess I should be more specific about the 12factor thing I just mentioned, because http://12factor.net/logs says:
>>>
A twelve-factor app never concerns itself with routing or storage of its output stream. It should not attempt to write to or manage logfiles. Instead, each running process writes its event stream, unbuffered, to stdout. During local development, the developer will view this stream in the foreground of their terminal to observe the app’s behavior.
>>>
The part that I want to be configurable is what the log levels are for various loggers.
For example, in production, you probably want most or all of your loggers set to WARN or such.
When running in development, ideally the developer can turn on more verbose logging without having to edit config files.
e.g.:
This is a Pyramid application, but environment variables of course could be used with any kind of application -- Django, etc.
```
LOGGER_ANWEB_LEVEL=debug pserve app.ini
```
History
Date User Action Args
2022年04月11日 14:56:53adminsetgithub: 51207
2016年03月05日 18:08:45Marc.Abramowitzsetmessages: + msg261219
2016年03月05日 17:55:24Marc.Abramowitzsetnosy: + Marc.Abramowitz
messages: + msg261217
2011年02月04日 23:34:10eric.araujosetnosy: + eric.araujo
messages: + msg127952
2009年10月01日 22:46:17vinay.sajipsetmessages: + msg93425
2009年10月01日 18:35:02thellersetstatus: open -> closed
resolution: not a bug
messages: + msg93418
2009年09月22日 19:46:44vinay.sajipsetmessages: + msg93013
2009年09月22日 19:45:38vinay.sajipsetmessages: + msg93012
2009年09月22日 19:30:31doughellmannsetmessages: + msg93010
2009年09月22日 19:03:36thellersetmessages: + msg93008
2009年09月22日 19:01:54thellersetmessages: + msg93007
2009年09月22日 13:50:59vinay.sajipsetmessages: + msg92994
2009年09月21日 21:19:00doughellmannsetmessages: + msg92961
2009年09月21日 21:02:35exarkunsetnosy: + exarkun
messages: + msg92960
2009年09月21日 20:58:34r.david.murraysetmessages: + msg92959
2009年09月21日 20:45:52doughellmannsetmessages: + msg92958
2009年09月21日 20:32:12vinay.sajipsetmessages: + msg92957
2009年09月21日 20:16:46thellersetmessages: + msg92956
2009年09月21日 18:47:37michael.foordsetnosy: + michael.foord
messages: + msg92953
2009年09月21日 18:44:21georg.brandlsetnosy: + georg.brandl
messages: + msg92952
2009年09月21日 18:31:00r.david.murraysetnosy: + r.david.murray, ncoghlan
messages: + msg92950
2009年09月21日 18:23:01eric.smithsetmessages: + msg92949
2009年09月21日 17:34:02pitrousetnosy: + pitrou
messages: + msg92947
2009年09月21日 17:15:56thellersetmessages: + msg92946
2009年09月21日 16:59:43vinay.sajipsetmessages: + msg92945
2009年09月21日 12:21:57doughellmannsetnosy: + doughellmann
2009年09月21日 12:15:38r.david.murraysetpriority: normal
nosy: + vinay.sajip

versions: + Python 2.7, Python 3.2
2009年09月21日 12:07:32eric.smithsetnosy: + eric.smith
2009年09月21日 11:23:16thellercreate

AltStyle によって変換されたページ (->オリジナル) /