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
d9fea3ca
Commit
d9fea3ca
authored
Jan 14, 2007
by
Vinay Sajip
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added WatchedFileHandler (based on SF patch #1598415)
parent
2e1518da
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
0 deletions
+49
-0
Lib/logging/handlers.py
Lib/logging/handlers.py
+49
-0
No files found.
Lib/logging/handlers.py
View file @
d9fea3ca
...
...
@@ -28,6 +28,7 @@ To use, simply 'import logging' and log away!
"""
import
sys
,
logging
,
socket
,
types
,
os
,
string
,
cPickle
,
struct
,
time
,
glob
from
stat
import
ST_DEV
,
ST_INO
try
:
import
codecs
...
...
@@ -282,6 +283,54 @@ class TimedRotatingFileHandler(BaseRotatingHandler):
self
.
stream
=
open
(
self
.
baseFilename
,
'w'
)
self
.
rolloverAt
=
self
.
rolloverAt
+
self
.
interval
class
WatchedFileHandler
(
logging
.
FileHandler
):
"""
A handler for logging to a file, which watches the file
to see if it has changed while in use. This can happen because of
usage of programs such as newsyslog and logrotate which perform
log file rotation. This handler, intended for use under Unix,
watches the file to see if it has changed since the last emit.
(A file has changed if its device or inode have changed.)
If it has changed, the old file stream is closed, and the file
opened to get a new stream.
This handler is not appropriate for use under Windows, because
under Windows open files cannot be moved or renamed - logging
opens the files with exclusive locks - and so there is no need
for such a handler. Furthermore, ST_INO is not supported under
Windows; stat always returns zero for this value.
This handler is based on a suggestion and patch by Chad J.
Schroeder.
"""
def
__init__
(
self
,
filename
,
mode
=
'a'
,
encoding
=
None
):
logging
.
FileHandler
.
__init__
(
self
,
filename
,
mode
,
encoding
)
stat
=
os
.
stat
(
self
.
baseFilename
)
self
.
dev
,
self
.
ino
=
stat
[
ST_DEV
],
stat
[
ST_INO
]
def
emit
(
self
,
record
):
"""
Emit a record.
First check if the underlying file has changed, and if it
has, close the old stream and reopen the file to get the
current stream.
"""
if
not
os
.
path
.
exists
(
self
.
baseFilename
):
stat
=
None
changed
=
1
else
:
stat
=
os
.
stat
(
self
.
baseFilename
)
changed
=
(
stat
[
ST_DEV
]
!=
self
.
dev
)
or
(
stat
[
ST_INO
]
!=
self
.
ino
)
if
changed
:
self
.
stream
.
flush
()
self
.
stream
.
close
()
self
.
stream
=
self
.
_open
()
if
stat
is
None
:
stat
=
os
.
stat
(
self
.
baseFilename
)
self
.
dev
,
self
.
ino
=
stat
[
ST_DEV
],
stat
[
ST_INO
]
logging
.
FileHandler
.
emit
(
self
,
record
)
class
SocketHandler
(
logging
.
Handler
):
"""
A handler class which writes logging records, in pickle format, to
...
...
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