RoySmith created this task.
RoySmith added a project: Pywikibot.
Restricted Application added subscribers: pywikibot-bugs-list, Aklapper.

TASK DESCRIPTION
  **Steps to replicate the issue** (include links if applicable):
  
  Run the following code:
  
    from pywikibot import Site, Page
    
    site = Site("test", "wikipedia")
    page = Page(site, "Wikipedia:Sandbox")
    page.put("foo")
  
  **What happens?**:
  
  It prints to stderr:
  
    Sleeping for 9.6 seconds, 2023-01-10 10:35:00
    Page [[test:Wikipedia:Sandbox]] saved
  
  **What should have happened instead?**:
  
  It should not produce anything on either stdout or stderr
  
  **Software version** (skip for WMF-hosted wikis like Wikipedia):
  
  pywikibot==7.7.1
  Python 3.9.13
  
  **Other information** (browser name/version, screenshots, etc.):
  
  Poking around <https://pypi.org/project/logging_tree/> you can see that 
pywikibot has installed its own logging hander:
  
    o   "pywiki"
    |   Level Level 11
    |   Propagate OFF
    |   Handler <TerminalHandler <stderr> (INFO)>
    |     Level INFO
    |     Filter 
<pywikibot.userinterfaces.terminal_interface_base.MaxLevelFilter object at 
0x7fc485a43e80>
    |     Formatter fmt='%(message)s%(newline)s' datefmt=None
    |   Handler <TerminalHandler <stdout> (STDOUT)>
    |     Level STDOUT
    |     Filter 
<pywikibot.userinterfaces.terminal_interface_base.MaxLevelFilter object at 
0x7fc485a43fd0>
    |     Formatter fmt='%(message)s%(newline)s' datefmt=None
    |   Handler <TerminalHandler <stderr> (WARNING)>
    |     Level WARNING
    |     Formatter fmt='%(levelname)s: %(message)s%(newline)s' datefmt=None
    |   |
    |   o<--[pywiki.wiki]
    |       |
    |       o<--"pywiki.wiki.family"
    |           Level NOTSET so inherits level Level 11
  
  Not only does this produce unwanted output to stderr/stdout, the hander is 
set to not propagate up to the root logger, so I can't even get the output into 
my application's log file, where I want it.  It should not be installing 
logging handlers when just called as a library.  Installing handlers is the 
purview of the application layer.   As stated in the Python language docs 
<https://docs.python.org/3.9/howto/logging.html#logging-advanced-tutorial>:
  
  > Note It is strongly advised that you do not add any handlers other than 
NullHandler to your library’s loggers. This is because the configuration of 
handlers is the prerogative of the application developer who uses your library. 
The application developer knows their target audience and what handlers are 
most appropriate for their application: if you add handlers ‘under the hood’, 
you might well interfere with their ability to carry out unit tests and deliver 
logs which suit their requirements.
  
  The handers should be installed by the individual scripts, or perhaps in the 
pwb wrapper script.  You could provide a `pywikibot.logging.init_handlers()` 
which a user could call to get the current behavior.  Or, at the very least, 
`pywikibot.logging.inhibit_handlers()` which could be called by a developer 
using the library to prevent the handlers from being installed.  Note that once 
a handler is installed, there's no good way for an application to remove it.

TASK DETAIL
  https://phabricator.wikimedia.org/T326650

EMAIL PREFERENCES
  https://phabricator.wikimedia.org/settings/panel/emailpreferences/

To: RoySmith
Cc: Aklapper, pywikibot-bugs-list, RoySmith, PotsdamLamb, Jyoo1011, 
JohnsonLee01, SHEKH, Dijkstra, Khutuck, Zkhalido, Viztor, Wenyi, Tbscho, MayS, 
Framawiki, Mdupont, JJMC89, Dvorapa, Altostratus, Avicennasis, mys_721tx, Xqt, 
jayvdb, Masti, Alchimista
_______________________________________________
pywikibot-bugs mailing list -- pywikibot-bugs@lists.wikimedia.org
To unsubscribe send an email to pywikibot-bugs-le...@lists.wikimedia.org

Reply via email to