Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
087570af
Kaydet (Commit)
087570af
authored
Tem 02, 2018
tarafından
Xtreak
Kaydeden (comit)
Vinay Sajip
Tem 02, 2018
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
bpo-33978: Close existing handlers before logging (re-)configuration. (GH-8008)
üst
c6cd164c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
88 additions
and
4 deletions
+88
-4
config.py
Lib/logging/config.py
+11
-4
test_logging.py
Lib/test/test_logging.py
+75
-0
2018-06-29-12-23-34.bpo-33978.y4csIw.rst
...S.d/next/Library/2018-06-29-12-23-34.bpo-33978.y4csIw.rst
+2
-0
No files found.
Lib/logging/config.py
Dosyayı görüntüle @
087570af
...
...
@@ -73,8 +73,8 @@ def fileConfig(fname, defaults=None, disable_existing_loggers=True):
# critical section
logging
.
_acquireLock
()
try
:
logging
.
_handlers
.
clear
()
del
logging
.
_handlerList
[:]
_clearExistingHandlers
()
# Handlers add themselves to logging._handlers
handlers
=
_install_handlers
(
cp
,
formatters
)
_install_loggers
(
cp
,
handlers
,
disable_existing_loggers
)
...
...
@@ -265,6 +265,14 @@ def _install_loggers(cp, handlers, disable_existing):
# logger.disabled = 1
_handle_existing_loggers
(
existing
,
child_loggers
,
disable_existing
)
def
_clearExistingHandlers
():
"""Clear and close existing handlers"""
logging
.
_handlers
.
clear
()
logging
.
shutdown
(
logging
.
_handlerList
[:])
del
logging
.
_handlerList
[:]
IDENTIFIER
=
re
.
compile
(
'^[a-z_][a-z0-9_]*$'
,
re
.
I
)
...
...
@@ -524,8 +532,7 @@ class DictConfigurator(BaseConfigurator):
else
:
disable_existing
=
config
.
pop
(
'disable_existing_loggers'
,
True
)
logging
.
_handlers
.
clear
()
del
logging
.
_handlerList
[:]
_clearExistingHandlers
()
# Do formatters first - they don't refer to anything else
formatters
=
config
.
get
(
'formatters'
,
EMPTY_DICT
)
...
...
Lib/test/test_logging.py
Dosyayı görüntüle @
087570af
...
...
@@ -1089,6 +1089,7 @@ class ConfigFileTest(BaseTest):
"""Reading logging config from a .ini-style config file."""
check_no_resource_warning
=
support
.
check_no_resource_warning
expected_log_pat
=
r"^(\w+) \+\+ (\w+)$"
# config0 is a standard configuration.
...
...
@@ -1297,6 +1298,27 @@ class ConfigFileTest(BaseTest):
datefmt=
"""
# config 8, check for resource warning
config8
=
r"""
[loggers]
keys=root
[handlers]
keys=file
[formatters]
keys=
[logger_root]
level=DEBUG
handlers=file
[handler_file]
class=FileHandler
level=DEBUG
args=("{tempfile}",)
"""
disable_test
=
"""
[loggers]
keys=root
...
...
@@ -1442,6 +1464,29 @@ class ConfigFileTest(BaseTest):
# Original logger output is empty.
self
.
assert_log_lines
([])
def
test_config8_ok
(
self
):
def
cleanup
(
h1
,
fn
):
h1
.
close
()
os
.
remove
(
fn
)
with
self
.
check_no_resource_warning
():
fd
,
fn
=
tempfile
.
mkstemp
(
".log"
,
"test_logging-X-"
)
os
.
close
(
fd
)
# Replace single backslash with double backslash in windows
# to avoid unicode error during string formatting
if
os
.
name
==
"nt"
:
fn
=
fn
.
replace
(
"
\\
"
,
"
\\\\
"
)
config8
=
self
.
config8
.
format
(
tempfile
=
fn
)
self
.
apply_config
(
config8
)
self
.
apply_config
(
config8
)
handler
=
logging
.
root
.
handlers
[
0
]
self
.
addCleanup
(
cleanup
,
handler
,
fn
)
def
test_logger_disabling
(
self
):
self
.
apply_config
(
self
.
disable_test
)
logger
=
logging
.
getLogger
(
'some_pristine_logger'
)
...
...
@@ -2022,6 +2067,7 @@ class ConfigDictTest(BaseTest):
"""Reading logging config from a dictionary."""
check_no_resource_warning
=
support
.
check_no_resource_warning
expected_log_pat
=
r"^(\w+) \+\+ (\w+)$"
# config0 is a standard configuration.
...
...
@@ -2896,6 +2942,35 @@ class ConfigDictTest(BaseTest):
logging
.
warning
(
'Exclamation'
)
self
.
assertTrue
(
output
.
getvalue
()
.
endswith
(
'Exclamation!
\n
'
))
def
test_config15_ok
(
self
):
def
cleanup
(
h1
,
fn
):
h1
.
close
()
os
.
remove
(
fn
)
with
self
.
check_no_resource_warning
():
fd
,
fn
=
tempfile
.
mkstemp
(
".log"
,
"test_logging-X-"
)
os
.
close
(
fd
)
config
=
{
"version"
:
1
,
"handlers"
:
{
"file"
:
{
"class"
:
"logging.FileHandler"
,
"filename"
:
fn
}
},
"root"
:
{
"handlers"
:
[
"file"
]
}
}
self
.
apply_config
(
config
)
self
.
apply_config
(
config
)
handler
=
logging
.
root
.
handlers
[
0
]
self
.
addCleanup
(
cleanup
,
handler
,
fn
)
def
setup_via_listener
(
self
,
text
,
verify
=
None
):
text
=
text
.
encode
(
"utf-8"
)
# Ask for a randomly assigned port (by using port 0)
...
...
Misc/NEWS.d/next/Library/2018-06-29-12-23-34.bpo-33978.y4csIw.rst
0 → 100644
Dosyayı görüntüle @
087570af
Closed existing logging handlers before reconfiguration via fileConfig
and dictConfig. Patch by Karthikeyan Singaravelan.
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