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
55ace65e
Commit
55ace65e
authored
May 07, 2017
by
Jim Fasarakis-Hilliard
Committed by
Vinay Sajip
May 07, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Closes bpo-30168: indent methods in Logger Class (#1295)
parent
3763ea86
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
169 additions
and
170 deletions
+169
-170
Doc/library/logging.rst
Doc/library/logging.rst
+169
-170
No files found.
Doc/library/logging.rst
View file @
55ace65e
...
...
@@ -69,259 +69,259 @@ is the module's name in the Python package namespace.
..
class
::
Logger
..
attribute
::
Logger
.
propagate
..
attribute
::
Logger
.
propagate
If
this
evaluates
to
true
,
events
logged
to
this
logger
will
be
passed
to
the
handlers
of
higher
level
(
ancestor
)
loggers
,
in
addition
to
any
handlers
attached
to
this
logger
.
Messages
are
passed
directly
to
the
ancestor
loggers
' handlers - neither the level nor filters of the ancestor loggers in
question are considered.
If
this
evaluates
to
true
,
events
logged
to
this
logger
will
be
passed
to
the
handlers
of
higher
level
(
ancestor
)
loggers
,
in
addition
to
any
handlers
attached
to
this
logger
.
Messages
are
passed
directly
to
the
ancestor
loggers
' handlers - neither the level nor filters of the ancestor loggers in
question are considered.
If this evaluates to false, logging messages are not passed to the handlers
of ancestor loggers.
If this evaluates to false, logging messages are not passed to the handlers
of ancestor loggers.
The constructor sets this attribute to ``True``.
The constructor sets this attribute to ``True``.
.. note:: If you attach a handler to a logger *and* one or more of its
ancestors, it may emit the same record multiple times. In general, you
should not need to attach a handler to more than one logger - if you just
attach it to the appropriate logger which is highest in the logger
hierarchy, then it will see all events logged by all descendant loggers,
provided that their propagate setting is left set to ``True``. A common
scenario is to attach handlers only to the root logger, and to let
propagation take care of the rest.
.. note:: If you attach a handler to a logger *and* one or more of its
ancestors, it may emit the same record multiple times. In general, you
should not need to attach a handler to more than one logger - if you just
attach it to the appropriate logger which is highest in the logger
hierarchy, then it will see all events logged by all descendant loggers,
provided that their propagate setting is left set to ``True``. A common
scenario is to attach handlers only to the root logger, and to let
propagation take care of the rest.
.. method:: Logger.setLevel(lvl)
.. method:: Logger.setLevel(lvl)
Sets the threshold for this logger to *lvl*. Logging messages which are less
severe than *lvl* will be ignored. When a logger is created, the level is set to
:const:`NOTSET` (which causes all messages to be processed when the logger is
the root logger, or delegation to the parent when the logger is a non-root
logger). Note that the root logger is created with level :const:`WARNING`.
Sets the threshold for this logger to *lvl*. Logging messages which are less
severe than *lvl* will be ignored. When a logger is created, the level is set to
:const:`NOTSET` (which causes all messages to be processed when the logger is
the root logger, or delegation to the parent when the logger is a non-root
logger). Note that the root logger is created with level :const:`WARNING`.
The term '
delegation
to
the
parent
' means that if a logger has a level of
NOTSET, its chain of ancestor loggers is traversed until either an ancestor with
a level other than NOTSET is found, or the root is reached.
The term '
delegation
to
the
parent
' means that if a logger has a level of
NOTSET, its chain of ancestor loggers is traversed until either an ancestor with
a level other than NOTSET is found, or the root is reached.
If an ancestor is found with a level other than NOTSET, then that ancestor'
s
level
is
treated
as
the
effective
level
of
the
logger
where
the
ancestor
search
began
,
and
is
used
to
determine
how
a
logging
event
is
handled
.
If an ancestor is found with a level other than NOTSET, then that ancestor'
s
level
is
treated
as
the
effective
level
of
the
logger
where
the
ancestor
search
began
,
and
is
used
to
determine
how
a
logging
event
is
handled
.
If
the
root
is
reached
,
and
it
has
a
level
of
NOTSET
,
then
all
messages
will
be
processed
.
Otherwise
,
the
root
's level will be used as the effective level.
If
the
root
is
reached
,
and
it
has
a
level
of
NOTSET
,
then
all
messages
will
be
processed
.
Otherwise
,
the
root
's level will be used as the effective level.
See :ref:`levels` for a list of levels.
See :ref:`levels` for a list of levels.
.. versionchanged:: 3.2
The *lvl* parameter now accepts a string representation of the
level such as '
INFO
' as an alternative to the integer constants
such as :const:`INFO`. Note, however, that levels are internally stored
as integers, and methods such as e.g. :meth:`getEffectiveLevel` and
:meth:`isEnabledFor` will return/expect to be passed integers.
.. versionchanged:: 3.2
The *lvl* parameter now accepts a string representation of the
level such as '
INFO
' as an alternative to the integer constants
such as :const:`INFO`. Note, however, that levels are internally stored
as integers, and methods such as e.g. :meth:`getEffectiveLevel` and
:meth:`isEnabledFor` will return/expect to be passed integers.
.. method:: Logger.isEnabledFor(lvl)
.. method:: Logger.isEnabledFor(lvl)
Indicates if a message of severity *lvl* would be processed by this logger.
This method checks first the module-level level set by
``logging.disable(lvl)`` and then the logger'
s
effective
level
as
determined
by
:
meth
:`
getEffectiveLevel
`.
Indicates if a message of severity *lvl* would be processed by this logger.
This method checks first the module-level level set by
``logging.disable(lvl)`` and then the logger'
s
effective
level
as
determined
by
:
meth
:`
getEffectiveLevel
`.
..
method
::
Logger
.
getEffectiveLevel
()
..
method
::
Logger
.
getEffectiveLevel
()
Indicates
the
effective
level
for
this
logger
.
If
a
value
other
than
:
const
:`
NOTSET
`
has
been
set
using
:
meth
:`
setLevel
`,
it
is
returned
.
Otherwise
,
the
hierarchy
is
traversed
towards
the
root
until
a
value
other
than
:
const
:`
NOTSET
`
is
found
,
and
that
value
is
returned
.
The
value
returned
is
an
integer
,
typically
one
of
:
const
:`
logging
.
DEBUG
`,
:
const
:`
logging
.
INFO
`
etc
.
Indicates
the
effective
level
for
this
logger
.
If
a
value
other
than
:
const
:`
NOTSET
`
has
been
set
using
:
meth
:`
setLevel
`,
it
is
returned
.
Otherwise
,
the
hierarchy
is
traversed
towards
the
root
until
a
value
other
than
:
const
:`
NOTSET
`
is
found
,
and
that
value
is
returned
.
The
value
returned
is
an
integer
,
typically
one
of
:
const
:`
logging
.
DEBUG
`,
:
const
:`
logging
.
INFO
`
etc
.
..
method
::
Logger
.
getChild
(
suffix
)
..
method
::
Logger
.
getChild
(
suffix
)
Returns
a
logger
which
is
a
descendant
to
this
logger
,
as
determined
by
the
suffix
.
Thus
,
``
logging
.
getLogger
(
'abc'
).
getChild
(
'def.ghi'
)``
would
return
the
same
logger
as
would
be
returned
by
``
logging
.
getLogger
(
'abc.def.ghi'
)``.
This
is
a
convenience
method
,
useful
when
the
parent
logger
is
named
using
e
.
g
.
``
__name__
``
rather
than
a
literal
string
.
Returns
a
logger
which
is
a
descendant
to
this
logger
,
as
determined
by
the
suffix
.
Thus
,
``
logging
.
getLogger
(
'abc'
).
getChild
(
'def.ghi'
)``
would
return
the
same
logger
as
would
be
returned
by
``
logging
.
getLogger
(
'abc.def.ghi'
)``.
This
is
a
convenience
method
,
useful
when
the
parent
logger
is
named
using
e
.
g
.
``
__name__
``
rather
than
a
literal
string
.
..
versionadded
::
3.2
..
versionadded
::
3.2
..
method
::
Logger
.
debug
(
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
debug
(
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
level
:
const
:`
DEBUG
`
on
this
logger
.
The
*
msg
*
is
the
message
format
string
,
and
the
*
args
*
are
the
arguments
which
are
merged
into
*
msg
*
using
the
string
formatting
operator
.
(
Note
that
this
means
that
you
can
use
keywords
in
the
format
string
,
together
with
a
single
dictionary
argument
.)
Logs
a
message
with
level
:
const
:`
DEBUG
`
on
this
logger
.
The
*
msg
*
is
the
message
format
string
,
and
the
*
args
*
are
the
arguments
which
are
merged
into
*
msg
*
using
the
string
formatting
operator
.
(
Note
that
this
means
that
you
can
use
keywords
in
the
format
string
,
together
with
a
single
dictionary
argument
.)
There
are
three
keyword
arguments
in
*
kwargs
*
which
are
inspected
:
*
exc_info
*,
*
stack_info
*,
and
*
extra
*.
There
are
three
keyword
arguments
in
*
kwargs
*
which
are
inspected
:
*
exc_info
*,
*
stack_info
*,
and
*
extra
*.
If
*
exc_info
*
does
not
evaluate
as
false
,
it
causes
exception
information
to
be
added
to
the
logging
message
.
If
an
exception
tuple
(
in
the
format
returned
by
:
func
:`
sys
.
exc_info
`)
or
an
exception
instance
is
provided
,
it
is
used
;
otherwise
,
:
func
:`
sys
.
exc_info
`
is
called
to
get
the
exception
information
.
If
*
exc_info
*
does
not
evaluate
as
false
,
it
causes
exception
information
to
be
added
to
the
logging
message
.
If
an
exception
tuple
(
in
the
format
returned
by
:
func
:`
sys
.
exc_info
`)
or
an
exception
instance
is
provided
,
it
is
used
;
otherwise
,
:
func
:`
sys
.
exc_info
`
is
called
to
get
the
exception
information
.
The
second
optional
keyword
argument
is
*
stack_info
*,
which
defaults
to
``
False
``.
If
true
,
stack
information
is
added
to
the
logging
message
,
including
the
actual
logging
call
.
Note
that
this
is
not
the
same
stack
information
as
that
displayed
through
specifying
*
exc_info
*:
The
former
is
stack
frames
from
the
bottom
of
the
stack
up
to
the
logging
call
in
the
current
thread
,
whereas
the
latter
is
information
about
stack
frames
which
have
been
unwound
,
following
an
exception
,
while
searching
for
exception
handlers
.
The
second
optional
keyword
argument
is
*
stack_info
*,
which
defaults
to
``
False
``.
If
true
,
stack
information
is
added
to
the
logging
message
,
including
the
actual
logging
call
.
Note
that
this
is
not
the
same
stack
information
as
that
displayed
through
specifying
*
exc_info
*:
The
former
is
stack
frames
from
the
bottom
of
the
stack
up
to
the
logging
call
in
the
current
thread
,
whereas
the
latter
is
information
about
stack
frames
which
have
been
unwound
,
following
an
exception
,
while
searching
for
exception
handlers
.
You
can
specify
*
stack_info
*
independently
of
*
exc_info
*,
e
.
g
.
to
just
show
how
you
got
to
a
certain
point
in
your
code
,
even
when
no
exceptions
were
raised
.
The
stack
frames
are
printed
following
a
header
line
which
says
::
You
can
specify
*
stack_info
*
independently
of
*
exc_info
*,
e
.
g
.
to
just
show
how
you
got
to
a
certain
point
in
your
code
,
even
when
no
exceptions
were
raised
.
The
stack
frames
are
printed
following
a
header
line
which
says
::
Stack
(
most
recent
call
last
):
Stack
(
most
recent
call
last
):
This
mimics
the
``
Traceback
(
most
recent
call
last
):``
which
is
used
when
displaying
exception
frames
.
This
mimics
the
``
Traceback
(
most
recent
call
last
):``
which
is
used
when
displaying
exception
frames
.
The
third
keyword
argument
is
*
extra
*
which
can
be
used
to
pass
a
dictionary
which
is
used
to
populate
the
__dict__
of
the
LogRecord
created
for
the
logging
event
with
user
-
defined
attributes
.
These
custom
attributes
can
then
be
used
as
you
like
.
For
example
,
they
could
be
incorporated
into
logged
messages
.
For
example
::
The
third
keyword
argument
is
*
extra
*
which
can
be
used
to
pass
a
dictionary
which
is
used
to
populate
the
__dict__
of
the
LogRecord
created
for
the
logging
event
with
user
-
defined
attributes
.
These
custom
attributes
can
then
be
used
as
you
like
.
For
example
,
they
could
be
incorporated
into
logged
messages
.
For
example
::
FORMAT
=
'%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging
.
basicConfig
(
format
=
FORMAT
)
d
=
{
'clientip'
:
'192.168.0.1'
,
'user'
:
'fbloggs'
}
logger
=
logging
.
getLogger
(
'tcpserver'
)
logger
.
warning
(
'Protocol problem: %s'
,
'connection reset'
,
extra
=
d
)
FORMAT
=
'%(asctime)-15s %(clientip)s %(user)-8s %(message)s'
logging
.
basicConfig
(
format
=
FORMAT
)
d
=
{
'clientip'
:
'192.168.0.1'
,
'user'
:
'fbloggs'
}
logger
=
logging
.
getLogger
(
'tcpserver'
)
logger
.
warning
(
'Protocol problem: %s'
,
'connection reset'
,
extra
=
d
)
would
print
something
like
::
would
print
something
like
::
2006
-
02
-
08
22
:
20
:
02
,
165
192.168.0.1
fbloggs
Protocol
problem
:
connection
reset
2006
-
02
-
08
22
:
20
:
02
,
165
192.168.0.1
fbloggs
Protocol
problem
:
connection
reset
The
keys
in
the
dictionary
passed
in
*
extra
*
should
not
clash
with
the
keys
used
by
the
logging
system
.
(
See
the
:
class
:`
Formatter
`
documentation
for
more
information
on
which
keys
are
used
by
the
logging
system
.)
The
keys
in
the
dictionary
passed
in
*
extra
*
should
not
clash
with
the
keys
used
by
the
logging
system
.
(
See
the
:
class
:`
Formatter
`
documentation
for
more
information
on
which
keys
are
used
by
the
logging
system
.)
If
you
choose
to
use
these
attributes
in
logged
messages
,
you
need
to
exercise
some
care
.
In
the
above
example
,
for
instance
,
the
:
class
:`
Formatter
`
has
been
set
up
with
a
format
string
which
expects
'clientip'
and
'user'
in
the
attribute
dictionary
of
the
LogRecord
.
If
these
are
missing
,
the
message
will
not
be
logged
because
a
string
formatting
exception
will
occur
.
So
in
this
case
,
you
always
need
to
pass
the
*
extra
*
dictionary
with
these
keys
.
If
you
choose
to
use
these
attributes
in
logged
messages
,
you
need
to
exercise
some
care
.
In
the
above
example
,
for
instance
,
the
:
class
:`
Formatter
`
has
been
set
up
with
a
format
string
which
expects
'clientip'
and
'user'
in
the
attribute
dictionary
of
the
LogRecord
.
If
these
are
missing
,
the
message
will
not
be
logged
because
a
string
formatting
exception
will
occur
.
So
in
this
case
,
you
always
need
to
pass
the
*
extra
*
dictionary
with
these
keys
.
While
this
might
be
annoying
,
this
feature
is
intended
for
use
in
specialized
circumstances
,
such
as
multi
-
threaded
servers
where
the
same
code
executes
in
many
contexts
,
and
interesting
conditions
which
arise
are
dependent
on
this
context
(
such
as
remote
client
IP
address
and
authenticated
user
name
,
in
the
above
example
).
In
such
circumstances
,
it
is
likely
that
specialized
:
class
:`
Formatter
`\
s
would
be
used
with
particular
:
class
:`
Handler
`\
s
.
While
this
might
be
annoying
,
this
feature
is
intended
for
use
in
specialized
circumstances
,
such
as
multi
-
threaded
servers
where
the
same
code
executes
in
many
contexts
,
and
interesting
conditions
which
arise
are
dependent
on
this
context
(
such
as
remote
client
IP
address
and
authenticated
user
name
,
in
the
above
example
).
In
such
circumstances
,
it
is
likely
that
specialized
:
class
:`
Formatter
`\
s
would
be
used
with
particular
:
class
:`
Handler
`\
s
.
..
versionadded
::
3.2
The
*
stack_info
*
parameter
was
added
.
..
versionadded
::
3.2
The
*
stack_info
*
parameter
was
added
.
..
versionchanged
::
3.5
The
*
exc_info
*
parameter
can
now
accept
exception
instances
.
..
versionchanged
::
3.5
The
*
exc_info
*
parameter
can
now
accept
exception
instances
.
..
method
::
Logger
.
info
(
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
info
(
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
level
:
const
:`
INFO
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Logs
a
message
with
level
:
const
:`
INFO
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
..
method
::
Logger
.
warning
(
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
warning
(
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
level
:
const
:`
WARNING
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Logs
a
message
with
level
:
const
:`
WARNING
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
..
note
::
There
is
an
obsolete
method
``
warn
``
which
is
functionally
identical
to
``
warning
``.
As
``
warn
``
is
deprecated
,
please
do
not
use
it
-
use
``
warning
``
instead
.
..
note
::
There
is
an
obsolete
method
``
warn
``
which
is
functionally
identical
to
``
warning
``.
As
``
warn
``
is
deprecated
,
please
do
not
use
it
-
use
``
warning
``
instead
.
..
method
::
Logger
.
error
(
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
error
(
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
level
:
const
:`
ERROR
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Logs
a
message
with
level
:
const
:`
ERROR
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
..
method
::
Logger
.
critical
(
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
critical
(
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
level
:
const
:`
CRITICAL
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Logs
a
message
with
level
:
const
:`
CRITICAL
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
..
method
::
Logger
.
log
(
lvl
,
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
log
(
lvl
,
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
integer
level
*
lvl
*
on
this
logger
.
The
other
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Logs
a
message
with
integer
level
*
lvl
*
on
this
logger
.
The
other
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
..
method
::
Logger
.
exception
(
msg
,
*
args
,
**
kwargs
)
..
method
::
Logger
.
exception
(
msg
,
*
args
,
**
kwargs
)
Logs
a
message
with
level
:
const
:`
ERROR
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Exception
info
is
added
to
the
logging
message
.
This
method
should
only
be
called
from
an
exception
handler
.
Logs
a
message
with
level
:
const
:`
ERROR
`
on
this
logger
.
The
arguments
are
interpreted
as
for
:
meth
:`
debug
`.
Exception
info
is
added
to
the
logging
message
.
This
method
should
only
be
called
from
an
exception
handler
.
..
method
::
Logger
.
addFilter
(
filt
)
..
method
::
Logger
.
addFilter
(
filt
)
Adds
the
specified
filter
*
filt
*
to
this
logger
.
Adds
the
specified
filter
*
filt
*
to
this
logger
.
..
method
::
Logger
.
removeFilter
(
filt
)
..
method
::
Logger
.
removeFilter
(
filt
)
Removes
the
specified
filter
*
filt
*
from
this
logger
.
Removes
the
specified
filter
*
filt
*
from
this
logger
.
..
method
::
Logger
.
filter
(
record
)
..
method
::
Logger
.
filter
(
record
)
Applies
this
logger
's filters to the record and returns a true value if the
record is to be processed. The filters are consulted in turn, until one of
them returns a false value. If none of them return a false value, the record
will be processed (passed to handlers). If one returns a false value, no
further processing of the record occurs.
Applies
this
logger
's filters to the record and returns a true value if the
record is to be processed. The filters are consulted in turn, until one of
them returns a false value. If none of them return a false value, the record
will be processed (passed to handlers). If one returns a false value, no
further processing of the record occurs.
.. method:: Logger.addHandler(hdlr)
.. method:: Logger.addHandler(hdlr)
Adds the specified handler *hdlr* to this logger.
Adds the specified handler *hdlr* to this logger.
.. method:: Logger.removeHandler(hdlr)
.. method:: Logger.removeHandler(hdlr)
Removes the specified handler *hdlr* from this logger.
Removes the specified handler *hdlr* from this logger.
.. method:: Logger.findCaller(stack_info=False)
.. method:: Logger.findCaller(stack_info=False)
Finds the caller'
s
source
filename
and
line
number
.
Returns
the
filename
,
line
number
,
function
name
and
stack
information
as
a
4
-
element
tuple
.
The
stack
information
is
returned
as
``
None
``
unless
*
stack_info
*
is
``
True
``.
Finds the caller'
s
source
filename
and
line
number
.
Returns
the
filename
,
line
number
,
function
name
and
stack
information
as
a
4
-
element
tuple
.
The
stack
information
is
returned
as
``
None
``
unless
*
stack_info
*
is
``
True
``.
..
method
::
Logger
.
handle
(
record
)
..
method
::
Logger
.
handle
(
record
)
Handles
a
record
by
passing
it
to
all
handlers
associated
with
this
logger
and
its
ancestors
(
until
a
false
value
of
*
propagate
*
is
found
).
This
method
is
used
for
unpickled
records
received
from
a
socket
,
as
well
as
those
created
locally
.
Logger
-
level
filtering
is
applied
using
:
meth
:`~
Logger
.
filter
`.
Handles
a
record
by
passing
it
to
all
handlers
associated
with
this
logger
and
its
ancestors
(
until
a
false
value
of
*
propagate
*
is
found
).
This
method
is
used
for
unpickled
records
received
from
a
socket
,
as
well
as
those
created
locally
.
Logger
-
level
filtering
is
applied
using
:
meth
:`~
Logger
.
filter
`.
..
method
::
Logger
.
makeRecord
(
name
,
lvl
,
fn
,
lno
,
msg
,
args
,
exc_info
,
func
=
None
,
extra
=
None
,
sinfo
=
None
)
..
method
::
Logger
.
makeRecord
(
name
,
lvl
,
fn
,
lno
,
msg
,
args
,
exc_info
,
func
=
None
,
extra
=
None
,
sinfo
=
None
)
This
is
a
factory
method
which
can
be
overridden
in
subclasses
to
create
specialized
:
class
:`
LogRecord
`
instances
.
This
is
a
factory
method
which
can
be
overridden
in
subclasses
to
create
specialized
:
class
:`
LogRecord
`
instances
.
..
method
::
Logger
.
hasHandlers
()
..
method
::
Logger
.
hasHandlers
()
Checks
to
see
if
this
logger
has
any
handlers
configured
.
This
is
done
by
looking
for
handlers
in
this
logger
and
its
parents
in
the
logger
hierarchy
.
Returns
``
True
``
if
a
handler
was
found
,
else
``
False
``.
The
method
stops
searching
up
the
hierarchy
whenever
a
logger
with
the
'propagate'
attribute
set
to
false
is
found
-
that
will
be
the
last
logger
which
is
checked
for
the
existence
of
handlers
.
Checks
to
see
if
this
logger
has
any
handlers
configured
.
This
is
done
by
looking
for
handlers
in
this
logger
and
its
parents
in
the
logger
hierarchy
.
Returns
``
True
``
if
a
handler
was
found
,
else
``
False
``.
The
method
stops
searching
up
the
hierarchy
whenever
a
logger
with
the
'propagate'
attribute
set
to
false
is
found
-
that
will
be
the
last
logger
which
is
checked
for
the
existence
of
handlers
.
..
versionadded
::
3.2
..
versionadded
::
3.2
..
_levels
:
...
...
@@ -1256,4 +1256,3 @@ with the :mod:`warnings` module.
package
available
from
this
site
is
suitable
for
use
with
Python
1.5.2
,
2.1
.
x
and
2.2
.
x
,
which
do
not
include
the
:
mod
:`
logging
`
package
in
the
standard
library
.
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