On Mon, Aug 24, 2020 at 7:39 PM Adam Hendry <adam.grant.hen...@gmail.com>
wrote:

> In the spirit of CHB's recommendation, this is my proposal:
>
> Would an update/addition/alternative API to the logging module be
> considered for inclusion in the stdlib?
>

These look like good ideas to me. And whether or not it would be considered
for the stdlib, a nice package on pypi could be nice. So I encourage you to
work on this :-)

After, of course, looking and seeing what's already out there. (though a
quick search in PyPi turns up, surprisingly, nothing. Lots of packages that
have to do with logging, but nothing that looks like a Pythonic API -- at
least not anything that looks the least bit documented or maintained.

-CHB







>     - Use properties and magic methods instead of getter and setter methods
>     - Add flag tfor `sys.excepthook` to choose whether to route all
> unhandled exceptions to the root logger
>     - PEP8ify to make source code more readable and "pretty"
>     - Make module-level `getLogger()` a class singleton, as it's only to
> be used once (warrants further discussion; I don't know if this is
> unnecessary)
>     - Provide context managers for loggers to prevent race conditions
> (e.g. rather than `getLogger()` have `with logger(__name__)" (warrants
> further discussion; I don't know if this is unnecessary)
>     - Enable iteration over all existing loggers by writing `__len__`s and
> `__getitems__` for logging  (warrants further discussion; I don't know if
> this is unnecessary)
>
> Again, these are just my thoughts. Mike Miller is right in that the
> `logging` module is EXTREMELY intimidating to the new user. This keeps new
> users from logging, which (arguably) should be done as best practice.
>
> On Mon, Aug 24, 2020 at 7:23 PM Adam Hendry <adam.grant.hen...@gmail.com>
> wrote:
>
>> Hello Everyone,
>>
>> Uh-oh, I think you misunderstood me. I was trying to be funny. Raymond
>> always does his "fist-slamming" thing in a funny way, so I was trying to
>> emulate that. I'm not mad. This is my first feature request post.
>>
>> The `logging` module works, so there's nothing that needs to be fixed.
>> Believe me, I'm a content-over-form programmer every day of the week and
>> twice on Sunday. We could make it more Pythonic though.
>>
>> One feature I would like to have added though is a flag I can set to
>> route all unhandled exceptions to the root logger. I need this for my
>> production GUIs, for example, and I have to override `sys.excepthook()` to
>> get this to work right now. Not a huge problem currently, but I think this
>> would be a nice addition to the module.
>>
>> Adam
>>
>>
>>
>> On Mon, Aug 24, 2020 at 4:43 PM Mike Miller <python-id...@mgmiller.net>
>> wrote:
>>
>>>
>>> On 2020-08-24 09:25, Christopher Barker wrote:
>>>  > I agree about the heavy rhetoric, but the OP has a good point. I have
>>> often
>>>  > thought the same thing.
>>>
>>> Yes, many folks have.  I've thought about it a bit myself.
>>>
>>> The logging package is comprehensive, mature, *very* flexible, and
>>> Java-esque.
>>> I've come to appreciate it over the decades.
>>>
>>> My take is that the extensive flexibility was more important in the
>>> past, the
>>> Java-feel only mildly annoying.  In the spirit of batteries-included it
>>> has tons
>>> of baked-in functionality like file rotation, talking to the network,
>>> and the NT
>>> event system.  Though it sometimes made sense in the past, I argue most
>>> of the
>>> functionality is not necessary to have in the stdlib today.  Result:
>>>
>>> - At the low/beginner end, the package and docs are simply overwhelming.
>>> - For the mid-size project, it duplicates functionality like the Unix
>>> logrotate
>>>    and syslog programs.
>>> - At the high-end, folks have moved on to "the ELK stack" etc and hosted
>>>    services.  Few are using python for *everything* at a larger shop.
>>>
>>>   The "12 factor app" pattern for modern services alludes to the latter
>>> point:
>>>
>>>      https://12factor.net/logs
>>>      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.
>>>
>>>
>>> Therefore, a simple way to log to stdout without a lot of reading and
>>> boilerplate might be useful.
>>>
>>> This is what logging.basicConfig() was supposed to be, and it is close
>>> but
>>> doesn't quite hit the mark.  The camelCase name is one small issue, it
>>> being
>>> buried under a mountain of docs is another.  Needing to import constants
>>> is
>>> slightly annoying as well.  It may be able to be improved doc-wise by
>>> putting it
>>> front and center on the first page of the logging docs.  The TOC will
>>> still be
>>> overwhelming to the newcomer however.
>>>
>>> Proposed solution: a trivial pythonic wrapper module with another name
>>> and page
>>> in the docs.  It says something like:
>>>
>>>
>>>      log - Logging Quickstart Module
>>>      =======================================
>>>
>>>      The log module is a simple interface meant to simplify logging for
>>>      *applications,* rather than libraries.  This distinction is
>>> important.
>>>
>>>      Libraries should be handled as they always have,
>>>      and no changes are necessary to continue to use logging with them::
>>>
>>>          # hellolib.py
>>>          import logging
>>>
>>>          logger = logging.getLogger(__name__)
>>>
>>>          def hello_world():
>>>              logger.info('hello world!')
>>>
>>>
>>>      For applications that simply want to log to standard out as would a
>>> modern
>>>      service, initialize logging quickly with log::
>>>
>>>          # main.py
>>>          import log
>>>          import hellolib
>>>
>>>          log.configure()  # with good defaults
>>>
>>>          hellolib.hello_world()
>>>
>>>
>>>      To configure logging and use it in the main script,
>>>      a slightly more complex version might look like this::
>>>
>>>          # main.py
>>>          import log
>>>          import hellolib
>>>
>>>          logger = log.configure('debug', format='%(levelname)s
>>> %(message)s')
>>>
>>>          logger.info('About to call hello_world()...')
>>>          hellolib.hello_world()
>>>
>>>
>>> I've experimented a bit with a module on PyPi named "out," with similar
>>> ideas,
>>> though I probably have over-engineered it with ANSI colors and Unicode.
>>>
>>> -Mike
>>> _______________________________________________
>>> Python-ideas mailing list -- python-ideas@python.org
>>> To unsubscribe send an email to python-ideas-le...@python.org
>>> https://mail.python.org/mailman3/lists/python-ideas.python.org/
>>> Message archived at
>>> https://mail.python.org/archives/list/python-ideas@python.org/message/SOCHCQRUNGZE5JH5CE5X4577TXSS3OOU/
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>>

-- 
Christopher Barker, PhD

Python Language Consulting
  - Teaching
  - Scientific Software Development
  - Desktop GUI and Web Development
  - wxPython, numpy, scipy, Cython
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/CZWMJ5TPCX3HP5YMCWXH26CE433XSCXH/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to