Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
cf67d6a9
Commit
cf67d6a9
authored
Jun 25, 2018
by
Dong-hee Na
Committed by
Vinay Sajip
Jun 25, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
bpo-33897: Add a 'force' keyword argument to logging.basicConfig(). (GH-7873)
parent
2af9f5d3
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
3 deletions
+46
-3
Doc/library/logging.rst
Doc/library/logging.rst
+10
-1
Lib/logging/__init__.py
Lib/logging/__init__.py
+14
-2
Lib/test/test_logging.py
Lib/test/test_logging.py
+21
-0
Misc/NEWS.d/next/Library/2018-06-23-18-09-28.bpo-33897.Hu0yvt.rst
...S.d/next/Library/2018-06-23-18-09-28.bpo-33897.Hu0yvt.rst
+1
-0
No files found.
Doc/library/logging.rst
View file @
cf67d6a9
...
...
@@ -1131,7 +1131,7 @@ functions.
if
no
handlers
are
defined
for
the
root
logger
.
This
function
does
nothing
if
the
root
logger
already
has
handlers
configured
for
it
.
configured
,
unless
the
keyword
argument
*
force
*
is
set
to
``
True
``
.
..
note
::
This
function
should
be
called
from
the
main
thread
before
other
threads
are
started
.
In
versions
of
Python
prior
to
...
...
@@ -1183,6 +1183,15 @@ functions.
| | with '
filename
' or '
stream
' - if both are |
| | present, a ``ValueError`` is raised. |
+--------------+---------------------------------------------+
| ``force`` | If this keyword argument is specified as |
| | true, any existing handlers attached to the |
| | root logger are removed and closed, before |
| | carrying out the configuration as specified |
| | by the other arguments. |
+--------------+---------------------------------------------+
.. versionchanged:: 3.8
The ``force`` argument was added.
.. versionchanged:: 3.2
The ``style`` argument was added.
...
...
Lib/logging/__init__.py
View file @
cf67d6a9
...
...
@@ -1793,7 +1793,8 @@ def basicConfig(**kwargs):
Do basic configuration for the logging system.
This function does nothing if the root logger already has handlers
configured. It is a convenience method intended for use by simple scripts
configured, unless the keyword argument *force* is set to ``True``.
It is a convenience method intended for use by simple scripts
to do one-shot configuration of the logging package.
The default behaviour is to create a StreamHandler which writes to
...
...
@@ -1821,13 +1822,19 @@ def basicConfig(**kwargs):
handlers, which will be added to the root handler. Any handler
in the list which does not have a formatter assigned will be
assigned the formatter created in this function.
force If this keyword is specified as true, any existing handlers
attached to the root logger are removed and closed, before
carrying out the configuration as specified by the other
arguments.
Note that you could specify a stream created using open(filename, mode)
rather than passing the filename and mode in. However, it should be
remembered that StreamHandler does not close its stream (since it may be
using sys.stdout or sys.stderr), whereas FileHandler closes its stream
when the handler is closed.
.. versionchanged:: 3.8
Added the ``force`` parameter.
.. versionchanged:: 3.2
Added the ``style`` parameter.
...
...
@@ -1842,6 +1849,11 @@ def basicConfig(**kwargs):
# basicConfig() from multiple threads
_acquireLock
()
try
:
force
=
kwargs
.
pop
(
'force'
,
False
)
if
force
:
for
h
in
root
.
handlers
[:]:
root
.
removeHandler
(
h
)
h
.
close
()
if
len
(
root
.
handlers
)
==
0
:
handlers
=
kwargs
.
pop
(
"handlers"
,
None
)
if
handlers
is
None
:
...
...
Lib/test/test_logging.py
View file @
cf67d6a9
...
...
@@ -3901,6 +3901,27 @@ class BasicConfigTest(unittest.TestCase):
self.assertIs(handlers[2].formatter, f)
self.assertIs(handlers[0].formatter, handlers[1].formatter)
def test_force(self):
old_string_io = io.StringIO()
new_string_io = io.StringIO()
old_handlers = [logging.StreamHandler(old_string_io)]
new_handlers = [logging.StreamHandler(new_string_io)]
logging.basicConfig(level=logging.WARNING, handlers=old_handlers)
logging.warning('warn')
logging.info('info')
logging.debug('debug')
self.assertEqual(len(logging.root.handlers), 1)
logging.basicConfig(level=logging.INFO, handlers=new_handlers,
force=True)
logging.warning('warn')
logging.info('info')
logging.debug('debug')
self.assertEqual(len(logging.root.handlers), 1)
self.assertEqual(old_string_io.getvalue().strip(),
'WARNING:root:warn')
self.assertEqual(new_string_io.getvalue().strip(),
'WARNING:root:warn
\
n
INFO:root:info')
def _test_log(self, method, level=None):
# logging.root has no handlers so basicConfig should be called
called = []
...
...
Misc/NEWS.d/next/Library/2018-06-23-18-09-28.bpo-33897.Hu0yvt.rst
0 → 100644
View file @
cf67d6a9
Added a 'force' keyword argument to logging.basicConfig().
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment