mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
logging: replace codecs.open with builtins.open, remove '_encoded' sort, add some tests.
This commit is contained in:
parent
1cdbf57c7c
commit
5252f9faee
4 changed files with 25 additions and 35 deletions
|
@ -35,11 +35,6 @@ __all__ = ['BASIC_FORMAT', 'BufferingFormatter', 'CRITICAL', 'DEBUG', 'ERROR',
|
||||||
'info', 'log', 'makeLogRecord', 'setLoggerClass', 'warn', 'warning',
|
'info', 'log', 'makeLogRecord', 'setLoggerClass', 'warn', 'warning',
|
||||||
'getLogRecordFactory', 'setLogRecordFactory', 'lastResort']
|
'getLogRecordFactory', 'setLogRecordFactory', 'lastResort']
|
||||||
|
|
||||||
try:
|
|
||||||
import codecs
|
|
||||||
except ImportError: #pragma: no cover
|
|
||||||
codecs = None
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import threading
|
import threading
|
||||||
except ImportError: #pragma: no cover
|
except ImportError: #pragma: no cover
|
||||||
|
@ -954,8 +949,6 @@ class FileHandler(StreamHandler):
|
||||||
"""
|
"""
|
||||||
#keep the absolute path, otherwise derived classes which use this
|
#keep the absolute path, otherwise derived classes which use this
|
||||||
#may come a cropper when the current directory changes
|
#may come a cropper when the current directory changes
|
||||||
if codecs is None: #pragma: no cover
|
|
||||||
encoding = None
|
|
||||||
self.baseFilename = os.path.abspath(filename)
|
self.baseFilename = os.path.abspath(filename)
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
self.encoding = encoding
|
self.encoding = encoding
|
||||||
|
@ -983,11 +976,7 @@ class FileHandler(StreamHandler):
|
||||||
Open the current base file with the (original) mode and encoding.
|
Open the current base file with the (original) mode and encoding.
|
||||||
Return the resulting stream.
|
Return the resulting stream.
|
||||||
"""
|
"""
|
||||||
if self.encoding is None:
|
return open(self.baseFilename, self.mode, encoding=self.encoding)
|
||||||
stream = open(self.baseFilename, self.mode)
|
|
||||||
else:
|
|
||||||
stream = codecs.open(self.baseFilename, self.mode, self.encoding)
|
|
||||||
return stream
|
|
||||||
|
|
||||||
def emit(self, record):
|
def emit(self, record):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -24,8 +24,8 @@ Copyright (C) 2001-2010 Vinay Sajip. All Rights Reserved.
|
||||||
To use, simply 'import logging' and log away!
|
To use, simply 'import logging' and log away!
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import sys, logging, logging.handlers, socket, struct, os, traceback, re
|
import sys, logging, logging.handlers, socket, struct, traceback, re
|
||||||
import types, io
|
import io
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import _thread as thread
|
import _thread as thread
|
||||||
|
@ -98,9 +98,6 @@ def _resolve(name):
|
||||||
def _strip_spaces(alist):
|
def _strip_spaces(alist):
|
||||||
return map(lambda x: x.strip(), alist)
|
return map(lambda x: x.strip(), alist)
|
||||||
|
|
||||||
def _encoded(s):
|
|
||||||
return s if isinstance(s, str) else s.encode('utf-8')
|
|
||||||
|
|
||||||
def _create_formatters(cp):
|
def _create_formatters(cp):
|
||||||
"""Create and return formatters"""
|
"""Create and return formatters"""
|
||||||
flist = cp["formatters"]["keys"]
|
flist = cp["formatters"]["keys"]
|
||||||
|
@ -215,7 +212,7 @@ def _install_loggers(cp, handlers, disable_existing):
|
||||||
#avoid disabling child loggers of explicitly
|
#avoid disabling child loggers of explicitly
|
||||||
#named loggers. With a sorted list it is easier
|
#named loggers. With a sorted list it is easier
|
||||||
#to find the child loggers.
|
#to find the child loggers.
|
||||||
existing.sort(key=_encoded)
|
existing.sort()
|
||||||
#We'll keep the list of existing loggers
|
#We'll keep the list of existing loggers
|
||||||
#which are children of named loggers here...
|
#which are children of named loggers here...
|
||||||
child_loggers = []
|
child_loggers = []
|
||||||
|
@ -588,7 +585,7 @@ class DictConfigurator(BaseConfigurator):
|
||||||
#avoid disabling child loggers of explicitly
|
#avoid disabling child loggers of explicitly
|
||||||
#named loggers. With a sorted list it is easier
|
#named loggers. With a sorted list it is easier
|
||||||
#to find the child loggers.
|
#to find the child loggers.
|
||||||
existing.sort(key=_encoded)
|
existing.sort()
|
||||||
#We'll keep the list of existing loggers
|
#We'll keep the list of existing loggers
|
||||||
#which are children of named loggers here...
|
#which are children of named loggers here...
|
||||||
child_loggers = []
|
child_loggers = []
|
||||||
|
@ -804,7 +801,6 @@ def listen(port=DEFAULT_LOGGING_CONFIG_PORT):
|
||||||
struct.pack(">L", n), followed by the config file.
|
struct.pack(">L", n), followed by the config file.
|
||||||
Uses fileConfig() to do the grunt work.
|
Uses fileConfig() to do the grunt work.
|
||||||
"""
|
"""
|
||||||
import tempfile
|
|
||||||
try:
|
try:
|
||||||
conn = self.connection
|
conn = self.connection
|
||||||
chunk = conn.recv(4)
|
chunk = conn.recv(4)
|
||||||
|
|
|
@ -25,6 +25,7 @@ To use, simply 'import logging.handlers' and log away!
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import logging, socket, os, pickle, struct, time, re
|
import logging, socket, os, pickle, struct, time, re
|
||||||
|
from codecs import BOM_UTF8
|
||||||
from stat import ST_DEV, ST_INO, ST_MTIME
|
from stat import ST_DEV, ST_INO, ST_MTIME
|
||||||
import queue
|
import queue
|
||||||
try:
|
try:
|
||||||
|
@ -32,11 +33,6 @@ try:
|
||||||
except ImportError: #pragma: no cover
|
except ImportError: #pragma: no cover
|
||||||
threading = None
|
threading = None
|
||||||
|
|
||||||
try:
|
|
||||||
import codecs
|
|
||||||
except ImportError: #pragma: no cover
|
|
||||||
codecs = None
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Some constants...
|
# Some constants...
|
||||||
#
|
#
|
||||||
|
@ -60,8 +56,6 @@ class BaseRotatingHandler(logging.FileHandler):
|
||||||
"""
|
"""
|
||||||
Use the specified filename for streamed logging
|
Use the specified filename for streamed logging
|
||||||
"""
|
"""
|
||||||
if codecs is None: #pragma: no cover
|
|
||||||
encoding = None
|
|
||||||
logging.FileHandler.__init__(self, filename, mode, encoding, delay)
|
logging.FileHandler.__init__(self, filename, mode, encoding, delay)
|
||||||
self.mode = mode
|
self.mode = mode
|
||||||
self.encoding = encoding
|
self.encoding = encoding
|
||||||
|
@ -793,9 +787,7 @@ class SysLogHandler(logging.Handler):
|
||||||
prio = prio.encode('utf-8')
|
prio = prio.encode('utf-8')
|
||||||
# Message is a string. Convert to bytes as required by RFC 5424
|
# Message is a string. Convert to bytes as required by RFC 5424
|
||||||
msg = msg.encode('utf-8')
|
msg = msg.encode('utf-8')
|
||||||
if codecs:
|
msg = prio + BOM_UTF8 + msg
|
||||||
msg = codecs.BOM_UTF8 + msg
|
|
||||||
msg = prio + msg
|
|
||||||
try:
|
try:
|
||||||
if self.unixsocket:
|
if self.unixsocket:
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -49,6 +49,7 @@ import weakref
|
||||||
try:
|
try:
|
||||||
import threading
|
import threading
|
||||||
# The following imports are needed only for tests which
|
# The following imports are needed only for tests which
|
||||||
|
# require threading
|
||||||
import asynchat
|
import asynchat
|
||||||
import asyncore
|
import asyncore
|
||||||
import errno
|
import errno
|
||||||
|
@ -95,9 +96,7 @@ class BaseTest(unittest.TestCase):
|
||||||
finally:
|
finally:
|
||||||
logging._releaseLock()
|
logging._releaseLock()
|
||||||
|
|
||||||
# Set two unused loggers: one non-ASCII and one Unicode.
|
# Set two unused loggers
|
||||||
# This is to test correct operation when sorting existing
|
|
||||||
# loggers in the configuration code. See issue 8201.
|
|
||||||
self.logger1 = logging.getLogger("\xab\xd7\xbb")
|
self.logger1 = logging.getLogger("\xab\xd7\xbb")
|
||||||
self.logger2 = logging.getLogger("\u013f\u00d6\u0047")
|
self.logger2 = logging.getLogger("\u013f\u00d6\u0047")
|
||||||
|
|
||||||
|
@ -310,8 +309,6 @@ class BuiltinLevelsTest(BaseTest):
|
||||||
('INF.BADPARENT', 'INFO', '4'),
|
('INF.BADPARENT', 'INFO', '4'),
|
||||||
])
|
])
|
||||||
|
|
||||||
def test_invalid_name(self):
|
|
||||||
self.assertRaises(TypeError, logging.getLogger, any)
|
|
||||||
|
|
||||||
class BasicFilterTest(BaseTest):
|
class BasicFilterTest(BaseTest):
|
||||||
|
|
||||||
|
@ -3514,6 +3511,22 @@ class LoggerTest(BaseTest):
|
||||||
self.addCleanup(setattr, self.logger.manager, 'disable', old_disable)
|
self.addCleanup(setattr, self.logger.manager, 'disable', old_disable)
|
||||||
self.assertFalse(self.logger.isEnabledFor(22))
|
self.assertFalse(self.logger.isEnabledFor(22))
|
||||||
|
|
||||||
|
def test_root_logger_aliases(self):
|
||||||
|
root = logging.getLogger()
|
||||||
|
self.assertIs(root, logging.root)
|
||||||
|
self.assertIs(root, logging.getLogger(None))
|
||||||
|
self.assertIs(root, logging.getLogger(''))
|
||||||
|
self.assertIs(root, logging.getLogger('foo').root)
|
||||||
|
self.assertIs(root, logging.getLogger('foo.bar').root)
|
||||||
|
self.assertIs(root, logging.getLogger('foo').parent)
|
||||||
|
|
||||||
|
self.assertIsNot(root, logging.getLogger('\0'))
|
||||||
|
self.assertIsNot(root, logging.getLogger('foo.bar').parent)
|
||||||
|
|
||||||
|
def test_invalid_names(self):
|
||||||
|
self.assertRaises(TypeError, logging.getLogger, any)
|
||||||
|
self.assertRaises(TypeError, logging.getLogger, b'foo')
|
||||||
|
|
||||||
|
|
||||||
class BaseFileTest(BaseTest):
|
class BaseFileTest(BaseTest):
|
||||||
"Base class for handler tests that write log files"
|
"Base class for handler tests that write log files"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue