mirror of
https://github.com/python/cpython.git
synced 2025-12-31 12:33:28 +00:00
parent
9e86ad7072
commit
b4a2df0c8d
2 changed files with 975 additions and 0 deletions
516
Lib/test/output/test_logging
Normal file
516
Lib/test/output/test_logging
Normal file
|
|
@ -0,0 +1,516 @@
|
|||
test_logging
|
||||
About to start TCP server...
|
||||
-- log_test0 begin ---------------------------------------------------
|
||||
CRITICAL:ERR:Message 0
|
||||
ERROR:ERR:Message 1
|
||||
CRITICAL:INF:Message 2
|
||||
ERROR:INF:Message 3
|
||||
WARN:INF:Message 4
|
||||
INFO:INF:Message 5
|
||||
CRITICAL:INF.UNDEF:Message 6
|
||||
ERROR:INF.UNDEF:Message 7
|
||||
WARN:INF.UNDEF:Message 8
|
||||
INFO:INF.UNDEF:Message 9
|
||||
CRITICAL:INF.ERR:Message 10
|
||||
ERROR:INF.ERR:Message 11
|
||||
CRITICAL:INF.ERR.UNDEF:Message 12
|
||||
ERROR:INF.ERR.UNDEF:Message 13
|
||||
CRITICAL:DEB:Message 14
|
||||
ERROR:DEB:Message 15
|
||||
WARN:DEB:Message 16
|
||||
INFO:DEB:Message 17
|
||||
DEBUG:DEB:Message 18
|
||||
CRITICAL:UNDEF:Message 19
|
||||
ERROR:UNDEF:Message 20
|
||||
WARN:UNDEF:Message 21
|
||||
INFO:UNDEF:Message 22
|
||||
CRITICAL:INF.BADPARENT.UNDEF:Message 23
|
||||
CRITICAL:INF.BADPARENT:Message 24
|
||||
INFO:INF:Messages should bear numbers 0 through 24.
|
||||
-- log_test0 end ---------------------------------------------------
|
||||
-- log_test1 begin ---------------------------------------------------
|
||||
-- setting logging level to 'Boring' -----
|
||||
Boring:root:This should only be seen at the 'Boring' logging level (or lower)
|
||||
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
|
||||
Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Chatterbox' -----
|
||||
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
|
||||
Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Garrulous' -----
|
||||
Garrulous:root:This should only be seen at the 'Garrulous' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Talkative' -----
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Verbose' -----
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Sociable' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Effusive' -----
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Terse' -----
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Taciturn' -----
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Silent' -----
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- Filtering at handler level to SOCIABLE --
|
||||
-- setting logging level to 'Boring' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Chatterbox' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Garrulous' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Talkative' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Verbose' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Sociable' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Effusive' -----
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Terse' -----
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Taciturn' -----
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Silent' -----
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- Filtering using GARRULOUS filter --
|
||||
-- setting logging level to 'Boring' -----
|
||||
Boring:root:This should only be seen at the 'Boring' logging level (or lower)
|
||||
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Chatterbox' -----
|
||||
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Garrulous' -----
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Talkative' -----
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Verbose' -----
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Sociable' -----
|
||||
Sociable:root:This should only be seen at the 'Sociable' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Effusive' -----
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Terse' -----
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Taciturn' -----
|
||||
Taciturn:root:This should only be seen at the 'Taciturn' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Silent' -----
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- Filtering using specific filter for SOCIABLE, TACITURN --
|
||||
-- setting logging level to 'Boring' -----
|
||||
Boring:root:This should only be seen at the 'Boring' logging level (or lower)
|
||||
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Chatterbox' -----
|
||||
Chatterbox:root:This should only be seen at the 'Chatterbox' logging level (or lower)
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Garrulous' -----
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Talkative' -----
|
||||
Talkative:root:This should only be seen at the 'Talkative' logging level (or lower)
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Verbose' -----
|
||||
Verbose:root:This should only be seen at the 'Verbose' logging level (or lower)
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Sociable' -----
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Effusive' -----
|
||||
Effusive:root:This should only be seen at the 'Effusive' logging level (or lower)
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Terse' -----
|
||||
Terse:root:This should only be seen at the 'Terse' logging level (or lower)
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Taciturn' -----
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- setting logging level to 'Silent' -----
|
||||
Silent:root:This should only be seen at the 'Silent' logging level (or lower)
|
||||
-- log_test1 end ---------------------------------------------------
|
||||
-- log_test2 begin ---------------------------------------------------
|
||||
-- logging at DEBUG, nothing should be seen yet --
|
||||
-- logging at INFO, nothing should be seen yet --
|
||||
-- logging at WARN, 3 messages should be seen --
|
||||
DEBUG:root:Debug message
|
||||
INFO:root:Info message
|
||||
WARN:root:Warn message
|
||||
-- logging 0 at INFO, messages should be seen every 10 events --
|
||||
-- logging 1 at INFO, messages should be seen every 10 events --
|
||||
-- logging 2 at INFO, messages should be seen every 10 events --
|
||||
-- logging 3 at INFO, messages should be seen every 10 events --
|
||||
-- logging 4 at INFO, messages should be seen every 10 events --
|
||||
-- logging 5 at INFO, messages should be seen every 10 events --
|
||||
-- logging 6 at INFO, messages should be seen every 10 events --
|
||||
-- logging 7 at INFO, messages should be seen every 10 events --
|
||||
-- logging 8 at INFO, messages should be seen every 10 events --
|
||||
-- logging 9 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 0
|
||||
INFO:root:Info index = 1
|
||||
INFO:root:Info index = 2
|
||||
INFO:root:Info index = 3
|
||||
INFO:root:Info index = 4
|
||||
INFO:root:Info index = 5
|
||||
INFO:root:Info index = 6
|
||||
INFO:root:Info index = 7
|
||||
INFO:root:Info index = 8
|
||||
INFO:root:Info index = 9
|
||||
-- logging 10 at INFO, messages should be seen every 10 events --
|
||||
-- logging 11 at INFO, messages should be seen every 10 events --
|
||||
-- logging 12 at INFO, messages should be seen every 10 events --
|
||||
-- logging 13 at INFO, messages should be seen every 10 events --
|
||||
-- logging 14 at INFO, messages should be seen every 10 events --
|
||||
-- logging 15 at INFO, messages should be seen every 10 events --
|
||||
-- logging 16 at INFO, messages should be seen every 10 events --
|
||||
-- logging 17 at INFO, messages should be seen every 10 events --
|
||||
-- logging 18 at INFO, messages should be seen every 10 events --
|
||||
-- logging 19 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 10
|
||||
INFO:root:Info index = 11
|
||||
INFO:root:Info index = 12
|
||||
INFO:root:Info index = 13
|
||||
INFO:root:Info index = 14
|
||||
INFO:root:Info index = 15
|
||||
INFO:root:Info index = 16
|
||||
INFO:root:Info index = 17
|
||||
INFO:root:Info index = 18
|
||||
INFO:root:Info index = 19
|
||||
-- logging 20 at INFO, messages should be seen every 10 events --
|
||||
-- logging 21 at INFO, messages should be seen every 10 events --
|
||||
-- logging 22 at INFO, messages should be seen every 10 events --
|
||||
-- logging 23 at INFO, messages should be seen every 10 events --
|
||||
-- logging 24 at INFO, messages should be seen every 10 events --
|
||||
-- logging 25 at INFO, messages should be seen every 10 events --
|
||||
-- logging 26 at INFO, messages should be seen every 10 events --
|
||||
-- logging 27 at INFO, messages should be seen every 10 events --
|
||||
-- logging 28 at INFO, messages should be seen every 10 events --
|
||||
-- logging 29 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 20
|
||||
INFO:root:Info index = 21
|
||||
INFO:root:Info index = 22
|
||||
INFO:root:Info index = 23
|
||||
INFO:root:Info index = 24
|
||||
INFO:root:Info index = 25
|
||||
INFO:root:Info index = 26
|
||||
INFO:root:Info index = 27
|
||||
INFO:root:Info index = 28
|
||||
INFO:root:Info index = 29
|
||||
-- logging 30 at INFO, messages should be seen every 10 events --
|
||||
-- logging 31 at INFO, messages should be seen every 10 events --
|
||||
-- logging 32 at INFO, messages should be seen every 10 events --
|
||||
-- logging 33 at INFO, messages should be seen every 10 events --
|
||||
-- logging 34 at INFO, messages should be seen every 10 events --
|
||||
-- logging 35 at INFO, messages should be seen every 10 events --
|
||||
-- logging 36 at INFO, messages should be seen every 10 events --
|
||||
-- logging 37 at INFO, messages should be seen every 10 events --
|
||||
-- logging 38 at INFO, messages should be seen every 10 events --
|
||||
-- logging 39 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 30
|
||||
INFO:root:Info index = 31
|
||||
INFO:root:Info index = 32
|
||||
INFO:root:Info index = 33
|
||||
INFO:root:Info index = 34
|
||||
INFO:root:Info index = 35
|
||||
INFO:root:Info index = 36
|
||||
INFO:root:Info index = 37
|
||||
INFO:root:Info index = 38
|
||||
INFO:root:Info index = 39
|
||||
-- logging 40 at INFO, messages should be seen every 10 events --
|
||||
-- logging 41 at INFO, messages should be seen every 10 events --
|
||||
-- logging 42 at INFO, messages should be seen every 10 events --
|
||||
-- logging 43 at INFO, messages should be seen every 10 events --
|
||||
-- logging 44 at INFO, messages should be seen every 10 events --
|
||||
-- logging 45 at INFO, messages should be seen every 10 events --
|
||||
-- logging 46 at INFO, messages should be seen every 10 events --
|
||||
-- logging 47 at INFO, messages should be seen every 10 events --
|
||||
-- logging 48 at INFO, messages should be seen every 10 events --
|
||||
-- logging 49 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 40
|
||||
INFO:root:Info index = 41
|
||||
INFO:root:Info index = 42
|
||||
INFO:root:Info index = 43
|
||||
INFO:root:Info index = 44
|
||||
INFO:root:Info index = 45
|
||||
INFO:root:Info index = 46
|
||||
INFO:root:Info index = 47
|
||||
INFO:root:Info index = 48
|
||||
INFO:root:Info index = 49
|
||||
-- logging 50 at INFO, messages should be seen every 10 events --
|
||||
-- logging 51 at INFO, messages should be seen every 10 events --
|
||||
-- logging 52 at INFO, messages should be seen every 10 events --
|
||||
-- logging 53 at INFO, messages should be seen every 10 events --
|
||||
-- logging 54 at INFO, messages should be seen every 10 events --
|
||||
-- logging 55 at INFO, messages should be seen every 10 events --
|
||||
-- logging 56 at INFO, messages should be seen every 10 events --
|
||||
-- logging 57 at INFO, messages should be seen every 10 events --
|
||||
-- logging 58 at INFO, messages should be seen every 10 events --
|
||||
-- logging 59 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 50
|
||||
INFO:root:Info index = 51
|
||||
INFO:root:Info index = 52
|
||||
INFO:root:Info index = 53
|
||||
INFO:root:Info index = 54
|
||||
INFO:root:Info index = 55
|
||||
INFO:root:Info index = 56
|
||||
INFO:root:Info index = 57
|
||||
INFO:root:Info index = 58
|
||||
INFO:root:Info index = 59
|
||||
-- logging 60 at INFO, messages should be seen every 10 events --
|
||||
-- logging 61 at INFO, messages should be seen every 10 events --
|
||||
-- logging 62 at INFO, messages should be seen every 10 events --
|
||||
-- logging 63 at INFO, messages should be seen every 10 events --
|
||||
-- logging 64 at INFO, messages should be seen every 10 events --
|
||||
-- logging 65 at INFO, messages should be seen every 10 events --
|
||||
-- logging 66 at INFO, messages should be seen every 10 events --
|
||||
-- logging 67 at INFO, messages should be seen every 10 events --
|
||||
-- logging 68 at INFO, messages should be seen every 10 events --
|
||||
-- logging 69 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 60
|
||||
INFO:root:Info index = 61
|
||||
INFO:root:Info index = 62
|
||||
INFO:root:Info index = 63
|
||||
INFO:root:Info index = 64
|
||||
INFO:root:Info index = 65
|
||||
INFO:root:Info index = 66
|
||||
INFO:root:Info index = 67
|
||||
INFO:root:Info index = 68
|
||||
INFO:root:Info index = 69
|
||||
-- logging 70 at INFO, messages should be seen every 10 events --
|
||||
-- logging 71 at INFO, messages should be seen every 10 events --
|
||||
-- logging 72 at INFO, messages should be seen every 10 events --
|
||||
-- logging 73 at INFO, messages should be seen every 10 events --
|
||||
-- logging 74 at INFO, messages should be seen every 10 events --
|
||||
-- logging 75 at INFO, messages should be seen every 10 events --
|
||||
-- logging 76 at INFO, messages should be seen every 10 events --
|
||||
-- logging 77 at INFO, messages should be seen every 10 events --
|
||||
-- logging 78 at INFO, messages should be seen every 10 events --
|
||||
-- logging 79 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 70
|
||||
INFO:root:Info index = 71
|
||||
INFO:root:Info index = 72
|
||||
INFO:root:Info index = 73
|
||||
INFO:root:Info index = 74
|
||||
INFO:root:Info index = 75
|
||||
INFO:root:Info index = 76
|
||||
INFO:root:Info index = 77
|
||||
INFO:root:Info index = 78
|
||||
INFO:root:Info index = 79
|
||||
-- logging 80 at INFO, messages should be seen every 10 events --
|
||||
-- logging 81 at INFO, messages should be seen every 10 events --
|
||||
-- logging 82 at INFO, messages should be seen every 10 events --
|
||||
-- logging 83 at INFO, messages should be seen every 10 events --
|
||||
-- logging 84 at INFO, messages should be seen every 10 events --
|
||||
-- logging 85 at INFO, messages should be seen every 10 events --
|
||||
-- logging 86 at INFO, messages should be seen every 10 events --
|
||||
-- logging 87 at INFO, messages should be seen every 10 events --
|
||||
-- logging 88 at INFO, messages should be seen every 10 events --
|
||||
-- logging 89 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 80
|
||||
INFO:root:Info index = 81
|
||||
INFO:root:Info index = 82
|
||||
INFO:root:Info index = 83
|
||||
INFO:root:Info index = 84
|
||||
INFO:root:Info index = 85
|
||||
INFO:root:Info index = 86
|
||||
INFO:root:Info index = 87
|
||||
INFO:root:Info index = 88
|
||||
INFO:root:Info index = 89
|
||||
-- logging 90 at INFO, messages should be seen every 10 events --
|
||||
-- logging 91 at INFO, messages should be seen every 10 events --
|
||||
-- logging 92 at INFO, messages should be seen every 10 events --
|
||||
-- logging 93 at INFO, messages should be seen every 10 events --
|
||||
-- logging 94 at INFO, messages should be seen every 10 events --
|
||||
-- logging 95 at INFO, messages should be seen every 10 events --
|
||||
-- logging 96 at INFO, messages should be seen every 10 events --
|
||||
-- logging 97 at INFO, messages should be seen every 10 events --
|
||||
-- logging 98 at INFO, messages should be seen every 10 events --
|
||||
-- logging 99 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 90
|
||||
INFO:root:Info index = 91
|
||||
INFO:root:Info index = 92
|
||||
INFO:root:Info index = 93
|
||||
INFO:root:Info index = 94
|
||||
INFO:root:Info index = 95
|
||||
INFO:root:Info index = 96
|
||||
INFO:root:Info index = 97
|
||||
INFO:root:Info index = 98
|
||||
INFO:root:Info index = 99
|
||||
-- logging 100 at INFO, messages should be seen every 10 events --
|
||||
-- logging 101 at INFO, messages should be seen every 10 events --
|
||||
INFO:root:Info index = 100
|
||||
INFO:root:Info index = 101
|
||||
-- log_test2 end ---------------------------------------------------
|
||||
-- log_test3 begin ---------------------------------------------------
|
||||
Unfiltered...
|
||||
INFO:a:Info 1
|
||||
INFO:a.b:Info 2
|
||||
INFO:a.c:Info 3
|
||||
INFO:a.b.c:Info 4
|
||||
INFO:a.b.c.d:Info 5
|
||||
INFO:a.bb.c:Info 6
|
||||
INFO:b:Info 7
|
||||
INFO:b.a:Info 8
|
||||
INFO:c.a.b:Info 9
|
||||
INFO:a.bb:Info 10
|
||||
Filtered with 'a.b'...
|
||||
INFO:a.b:Info 2
|
||||
INFO:a.b.c:Info 4
|
||||
INFO:a.b.c.d:Info 5
|
||||
-- log_test3 end ---------------------------------------------------
|
||||
-- logrecv output begin ---------------------------------------------------
|
||||
ERR -> CRITICAL: Message 0 (via logrecv.tcp.ERR)
|
||||
ERR -> ERROR: Message 1 (via logrecv.tcp.ERR)
|
||||
INF -> CRITICAL: Message 2 (via logrecv.tcp.INF)
|
||||
INF -> ERROR: Message 3 (via logrecv.tcp.INF)
|
||||
INF -> WARN: Message 4 (via logrecv.tcp.INF)
|
||||
INF -> INFO: Message 5 (via logrecv.tcp.INF)
|
||||
INF.UNDEF -> CRITICAL: Message 6 (via logrecv.tcp.INF.UNDEF)
|
||||
INF.UNDEF -> ERROR: Message 7 (via logrecv.tcp.INF.UNDEF)
|
||||
INF.UNDEF -> WARN: Message 8 (via logrecv.tcp.INF.UNDEF)
|
||||
INF.UNDEF -> INFO: Message 9 (via logrecv.tcp.INF.UNDEF)
|
||||
INF.ERR -> CRITICAL: Message 10 (via logrecv.tcp.INF.ERR)
|
||||
INF.ERR -> ERROR: Message 11 (via logrecv.tcp.INF.ERR)
|
||||
INF.ERR.UNDEF -> CRITICAL: Message 12 (via logrecv.tcp.INF.ERR.UNDEF)
|
||||
INF.ERR.UNDEF -> ERROR: Message 13 (via logrecv.tcp.INF.ERR.UNDEF)
|
||||
DEB -> CRITICAL: Message 14 (via logrecv.tcp.DEB)
|
||||
DEB -> ERROR: Message 15 (via logrecv.tcp.DEB)
|
||||
DEB -> WARN: Message 16 (via logrecv.tcp.DEB)
|
||||
DEB -> INFO: Message 17 (via logrecv.tcp.DEB)
|
||||
DEB -> DEBUG: Message 18 (via logrecv.tcp.DEB)
|
||||
UNDEF -> CRITICAL: Message 19 (via logrecv.tcp.UNDEF)
|
||||
UNDEF -> ERROR: Message 20 (via logrecv.tcp.UNDEF)
|
||||
UNDEF -> WARN: Message 21 (via logrecv.tcp.UNDEF)
|
||||
UNDEF -> INFO: Message 22 (via logrecv.tcp.UNDEF)
|
||||
INF.BADPARENT.UNDEF -> CRITICAL: Message 23 (via logrecv.tcp.INF.BADPARENT.UNDEF)
|
||||
INF.BADPARENT -> CRITICAL: Message 24 (via logrecv.tcp.INF.BADPARENT)
|
||||
INF -> INFO: Messages should bear numbers 0 through 24. (via logrecv.tcp.INF)
|
||||
-- logrecv output end ---------------------------------------------------
|
||||
459
Lib/test/test_logging.py
Normal file
459
Lib/test/test_logging.py
Normal file
|
|
@ -0,0 +1,459 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# Copyright 2001-2002 by Vinay Sajip. All Rights Reserved.
|
||||
#
|
||||
# Permission to use, copy, modify, and distribute this software and its
|
||||
# documentation for any purpose and without fee is hereby granted,
|
||||
# provided that the above copyright notice appear in all copies and that
|
||||
# both that copyright notice and this permission notice appear in
|
||||
# supporting documentation, and that the name of Vinay Sajip
|
||||
# not be used in advertising or publicity pertaining to distribution
|
||||
# of the software without specific, written prior permission.
|
||||
# VINAY SAJIP DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
|
||||
# ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL
|
||||
# VINAY SAJIP BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
|
||||
# ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
|
||||
# IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
|
||||
# OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
#
|
||||
# This file is part of the Python logging distribution. See
|
||||
# http://www.red-dove.com/python_logging.html
|
||||
#
|
||||
"""Test harness for the logging module. Run all tests.
|
||||
|
||||
Copyright (C) 2001-2002 Vinay Sajip. All Rights Reserved.
|
||||
"""
|
||||
|
||||
from select import select
|
||||
import os, sys, string, struct, types, cPickle, cStringIO
|
||||
import socket, threading, time, locale
|
||||
import logging, logging.handlers, logging.config
|
||||
|
||||
locale.setlocale(locale.LC_ALL, '')
|
||||
|
||||
BANNER = "-- %-10s %-6s ---------------------------------------------------\n"
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Log receiver
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
TIMEOUT = 10
|
||||
|
||||
from SocketServer import ThreadingTCPServer, StreamRequestHandler
|
||||
|
||||
class LogRecordStreamHandler(StreamRequestHandler):
|
||||
"""
|
||||
Handler for a streaming logging request. It basically logs the record
|
||||
using whatever logging policy is configured locally.
|
||||
"""
|
||||
|
||||
def handle(self):
|
||||
"""
|
||||
Handle multiple requests - each expected to be a 4-byte length,
|
||||
followed by the LogRecord in pickle format. Logs the record
|
||||
according to whatever policy is configured locally.
|
||||
"""
|
||||
while 1:
|
||||
try:
|
||||
chunk = self.connection.recv(4)
|
||||
if len(chunk) < 4:
|
||||
break
|
||||
slen = struct.unpack(">L", chunk)[0]
|
||||
#print slen
|
||||
chunk = self.connection.recv(slen)
|
||||
while len(chunk) < slen:
|
||||
chunk = chunk + self.connection.recv(slen - len(chunk))
|
||||
obj = self.unPickle(chunk)
|
||||
record = logging.LogRecord(None, None, "", 0, "", (), None)
|
||||
record.__dict__.update(obj)
|
||||
self.handleLogRecord(record)
|
||||
except:
|
||||
raise
|
||||
|
||||
def unPickle(self, data):
|
||||
return cPickle.loads(data)
|
||||
|
||||
def handleLogRecord(self, record):
|
||||
logname = "logrecv.tcp." + record.name
|
||||
record.msg = record.msg + " (via " + logname + ")"
|
||||
logger = logging.getLogger(logname)
|
||||
logger.handle(record)
|
||||
|
||||
class LogRecordSocketReceiver(ThreadingTCPServer):
|
||||
"""
|
||||
A simple-minded TCP socket-based logging receiver suitable for test
|
||||
purposes.
|
||||
"""
|
||||
|
||||
allow_reuse_address = 1
|
||||
|
||||
def __init__(self, host='localhost',
|
||||
port=logging.handlers.DEFAULT_TCP_LOGGING_PORT,
|
||||
handler=LogRecordStreamHandler):
|
||||
ThreadingTCPServer.__init__(self, (host, port), handler)
|
||||
self.abort = 0
|
||||
self.timeout = 1
|
||||
|
||||
def serve_until_stopped(self):
|
||||
abort = 0
|
||||
while not abort:
|
||||
rd, wr, ex = select([self.socket.fileno()],
|
||||
[], [],
|
||||
self.timeout)
|
||||
if rd:
|
||||
self.handle_request()
|
||||
abort = self.abort
|
||||
|
||||
def runTCP(tcpserver):
|
||||
tcpserver.serve_until_stopped()
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test 0
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
msgcount = 0
|
||||
|
||||
def nextmessage():
|
||||
global msgcount
|
||||
rv = "Message %d" % msgcount
|
||||
msgcount = msgcount + 1
|
||||
return rv
|
||||
|
||||
def test0():
|
||||
ERR = logging.getLogger("ERR")
|
||||
ERR.setLevel(logging.ERROR)
|
||||
INF = logging.getLogger("INF")
|
||||
INF.setLevel(logging.INFO)
|
||||
INF_ERR = logging.getLogger("INF.ERR")
|
||||
INF_ERR.setLevel(logging.ERROR)
|
||||
DEB = logging.getLogger("DEB")
|
||||
DEB.setLevel(logging.DEBUG)
|
||||
|
||||
INF_UNDEF = logging.getLogger("INF.UNDEF")
|
||||
INF_ERR_UNDEF = logging.getLogger("INF.ERR.UNDEF")
|
||||
UNDEF = logging.getLogger("UNDEF")
|
||||
|
||||
GRANDCHILD = logging.getLogger("INF.BADPARENT.UNDEF")
|
||||
CHILD = logging.getLogger("INF.BADPARENT")
|
||||
|
||||
#These should log
|
||||
ERR.log(logging.FATAL, nextmessage())
|
||||
ERR.error(nextmessage())
|
||||
|
||||
INF.log(logging.FATAL, nextmessage())
|
||||
INF.error(nextmessage())
|
||||
INF.warn(nextmessage())
|
||||
INF.info(nextmessage())
|
||||
|
||||
INF_UNDEF.log(logging.FATAL, nextmessage())
|
||||
INF_UNDEF.error(nextmessage())
|
||||
INF_UNDEF.warn (nextmessage())
|
||||
INF_UNDEF.info (nextmessage())
|
||||
|
||||
INF_ERR.log(logging.FATAL, nextmessage())
|
||||
INF_ERR.error(nextmessage())
|
||||
|
||||
INF_ERR_UNDEF.log(logging.FATAL, nextmessage())
|
||||
INF_ERR_UNDEF.error(nextmessage())
|
||||
|
||||
DEB.log(logging.FATAL, nextmessage())
|
||||
DEB.error(nextmessage())
|
||||
DEB.warn (nextmessage())
|
||||
DEB.info (nextmessage())
|
||||
DEB.debug(nextmessage())
|
||||
|
||||
UNDEF.log(logging.FATAL, nextmessage())
|
||||
UNDEF.error(nextmessage())
|
||||
UNDEF.warn (nextmessage())
|
||||
UNDEF.info (nextmessage())
|
||||
|
||||
GRANDCHILD.log(logging.FATAL, nextmessage())
|
||||
CHILD.log(logging.FATAL, nextmessage())
|
||||
|
||||
#These should not log
|
||||
ERR.warn(nextmessage())
|
||||
ERR.info(nextmessage())
|
||||
ERR.debug(nextmessage())
|
||||
|
||||
INF.debug(nextmessage())
|
||||
INF_UNDEF.debug(nextmessage())
|
||||
|
||||
INF_ERR.warn(nextmessage())
|
||||
INF_ERR.info(nextmessage())
|
||||
INF_ERR.debug(nextmessage())
|
||||
INF_ERR_UNDEF.warn(nextmessage())
|
||||
INF_ERR_UNDEF.info(nextmessage())
|
||||
INF_ERR_UNDEF.debug(nextmessage())
|
||||
|
||||
INF.info("Messages should bear numbers 0 through 24.")
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test 1
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# First, we define our levels. There can be as many as you want - the only
|
||||
# limitations are that they should be integers, the lowest should be > 0 and
|
||||
# larger values mean less information being logged. If you need specific
|
||||
# level values which do not fit into these limitations, you can use a
|
||||
# mapping dictionary to convert between your application levels and the
|
||||
# logging system.
|
||||
#
|
||||
SILENT = 10
|
||||
TACITURN = 9
|
||||
TERSE = 8
|
||||
EFFUSIVE = 7
|
||||
SOCIABLE = 6
|
||||
VERBOSE = 5
|
||||
TALKATIVE = 4
|
||||
GARRULOUS = 3
|
||||
CHATTERBOX = 2
|
||||
BORING = 1
|
||||
|
||||
LEVEL_RANGE = range(BORING, SILENT + 1)
|
||||
|
||||
#
|
||||
# Next, we define names for our levels. You don't need to do this - in which
|
||||
# case the system will use "Level n" to denote the text for the level.
|
||||
#
|
||||
my_logging_levels = {
|
||||
SILENT : 'Silent',
|
||||
TACITURN : 'Taciturn',
|
||||
TERSE : 'Terse',
|
||||
EFFUSIVE : 'Effusive',
|
||||
SOCIABLE : 'Sociable',
|
||||
VERBOSE : 'Verbose',
|
||||
TALKATIVE : 'Talkative',
|
||||
GARRULOUS : 'Garrulous',
|
||||
CHATTERBOX : 'Chatterbox',
|
||||
BORING : 'Boring',
|
||||
}
|
||||
|
||||
#
|
||||
# Now, to demonstrate filtering: suppose for some perverse reason we only
|
||||
# want to print out all except GARRULOUS messages. Let's create a filter for
|
||||
# this purpose...
|
||||
#
|
||||
class SpecificLevelFilter(logging.Filter):
|
||||
def __init__(self, lvl):
|
||||
self.level = lvl
|
||||
|
||||
def filter(self, record):
|
||||
return self.level != record.levelno
|
||||
|
||||
class GarrulousFilter(SpecificLevelFilter):
|
||||
def __init__(self):
|
||||
SpecificLevelFilter.__init__(self, GARRULOUS)
|
||||
|
||||
#
|
||||
# Now, let's demonstrate filtering at the logger. This time, use a filter
|
||||
# which excludes SOCIABLE and TACITURN messages. Note that GARRULOUS events
|
||||
# are still excluded.
|
||||
#
|
||||
class VerySpecificFilter(logging.Filter):
|
||||
def filter(self, record):
|
||||
return record.levelno not in [SOCIABLE, TACITURN]
|
||||
|
||||
def message(s):
|
||||
sys.stdout.write("%s\n" % s)
|
||||
|
||||
SHOULD1 = "This should only be seen at the '%s' logging level (or lower)"
|
||||
|
||||
def test1():
|
||||
#
|
||||
# Now, tell the logging system to associate names with our levels.
|
||||
#
|
||||
for lvl in my_logging_levels.keys():
|
||||
logging.addLevelName(lvl, my_logging_levels[lvl])
|
||||
|
||||
#
|
||||
# Now, define a test function which logs an event at each of our levels.
|
||||
#
|
||||
|
||||
def doLog(log):
|
||||
for lvl in LEVEL_RANGE:
|
||||
log.log(lvl, SHOULD1, logging.getLevelName(lvl))
|
||||
|
||||
log = logging.getLogger("")
|
||||
hdlr = log.handlers[0]
|
||||
#
|
||||
# Set the logging level to each different value and call the utility
|
||||
# function to log events.
|
||||
# In the output, you should see that each time round the loop, the number of
|
||||
# logging events which are actually output decreases.
|
||||
#
|
||||
for lvl in LEVEL_RANGE:
|
||||
message("-- setting logging level to '%s' -----" %
|
||||
logging.getLevelName(lvl))
|
||||
log.setLevel(lvl)
|
||||
doLog(log)
|
||||
#
|
||||
# Now, we demonstrate level filtering at the handler level. Tell the
|
||||
# handler defined above to filter at level 'SOCIABLE', and repeat the
|
||||
# above loop. Compare the output from the two runs.
|
||||
#
|
||||
hdlr.setLevel(SOCIABLE)
|
||||
message("-- Filtering at handler level to SOCIABLE --")
|
||||
for lvl in LEVEL_RANGE:
|
||||
message("-- setting logging level to '%s' -----" %
|
||||
logging.getLevelName(lvl))
|
||||
log.setLevel(lvl)
|
||||
doLog(log)
|
||||
|
||||
hdlr.setLevel(0) #turn off level filtering at the handler
|
||||
|
||||
garr = GarrulousFilter()
|
||||
hdlr.addFilter(garr)
|
||||
message("-- Filtering using GARRULOUS filter --")
|
||||
for lvl in LEVEL_RANGE:
|
||||
message("-- setting logging level to '%s' -----" %
|
||||
logging.getLevelName(lvl))
|
||||
log.setLevel(lvl)
|
||||
doLog(log)
|
||||
spec = VerySpecificFilter()
|
||||
log.addFilter(spec)
|
||||
message("-- Filtering using specific filter for SOCIABLE, TACITURN --")
|
||||
for lvl in LEVEL_RANGE:
|
||||
message("-- setting logging level to '%s' -----" %
|
||||
logging.getLevelName(lvl))
|
||||
log.setLevel(lvl)
|
||||
doLog(log)
|
||||
|
||||
log.removeFilter(spec)
|
||||
hdlr.removeFilter(garr)
|
||||
#Undo the one level which clashes...for regression tests
|
||||
logging.addLevelName(logging.DEBUG, "DEBUG")
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test 2
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
MSG = "-- logging %d at INFO, messages should be seen every 10 events --"
|
||||
def test2():
|
||||
logger = logging.getLogger("")
|
||||
sh = logger.handlers[0]
|
||||
logger.removeHandler(sh)
|
||||
mh = logging.handlers.MemoryHandler(10,logging.WARN, sh)
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(mh)
|
||||
message("-- logging at DEBUG, nothing should be seen yet --")
|
||||
logger.debug("Debug message")
|
||||
message("-- logging at INFO, nothing should be seen yet --")
|
||||
logger.info("Info message")
|
||||
message("-- logging at WARN, 3 messages should be seen --")
|
||||
logger.warn("Warn message")
|
||||
for i in xrange(102):
|
||||
message(MSG % i)
|
||||
logger.info("Info index = %d", i)
|
||||
mh.close()
|
||||
logger.removeHandler(mh)
|
||||
logger.addHandler(sh)
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test 3
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
FILTER = "a.b"
|
||||
|
||||
def doLog3():
|
||||
logging.getLogger("a").info("Info 1")
|
||||
logging.getLogger("a.b").info("Info 2")
|
||||
logging.getLogger("a.c").info("Info 3")
|
||||
logging.getLogger("a.b.c").info("Info 4")
|
||||
logging.getLogger("a.b.c.d").info("Info 5")
|
||||
logging.getLogger("a.bb.c").info("Info 6")
|
||||
logging.getLogger("b").info("Info 7")
|
||||
logging.getLogger("b.a").info("Info 8")
|
||||
logging.getLogger("c.a.b").info("Info 9")
|
||||
logging.getLogger("a.bb").info("Info 10")
|
||||
|
||||
def test3():
|
||||
root = logging.getLogger()
|
||||
root.setLevel(logging.DEBUG)
|
||||
hand = root.handlers[0]
|
||||
message("Unfiltered...")
|
||||
doLog3()
|
||||
message("Filtered with '%s'..." % FILTER)
|
||||
filt = logging.Filter(FILTER)
|
||||
hand.addFilter(filt)
|
||||
doLog3()
|
||||
hand.removeFilter(filt)
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
# Test Harness
|
||||
#----------------------------------------------------------------------------
|
||||
def banner(nm, typ):
|
||||
sep = BANNER % (nm, typ)
|
||||
sys.stdout.write(sep)
|
||||
sys.stdout.flush()
|
||||
|
||||
def test_main():
|
||||
rootLogger = logging.getLogger("")
|
||||
rootLogger.setLevel(logging.DEBUG)
|
||||
hdlr = logging.StreamHandler(sys.stdout)
|
||||
fmt = logging.Formatter(logging.BASIC_FORMAT)
|
||||
hdlr.setFormatter(fmt)
|
||||
rootLogger.addHandler(hdlr)
|
||||
|
||||
#Set up a handler such that all events are sent via a socket to the log
|
||||
#receiver (logrecv).
|
||||
#The handler will only be added to the rootLogger for some of the tests
|
||||
hdlr = logging.handlers.SocketHandler('localhost',
|
||||
logging.handlers.DEFAULT_TCP_LOGGING_PORT)
|
||||
|
||||
#Configure the logger for logrecv so events do not propagate beyond it.
|
||||
#The sockLogger output is buffered in memory until the end of the test,
|
||||
#and printed at the end.
|
||||
sockOut = cStringIO.StringIO()
|
||||
sockLogger = logging.getLogger("logrecv")
|
||||
sockLogger.setLevel(logging.DEBUG)
|
||||
sockhdlr = logging.StreamHandler(sockOut)
|
||||
sockhdlr.setFormatter(logging.Formatter(
|
||||
"%(name)s -> %(levelname)s: %(message)s"))
|
||||
sockLogger.addHandler(sockhdlr)
|
||||
sockLogger.propagate = 0
|
||||
|
||||
#Set up servers
|
||||
threads = []
|
||||
tcpserver = LogRecordSocketReceiver()
|
||||
sys.stdout.write("About to start TCP server...\n")
|
||||
threads.append(threading.Thread(target=runTCP, args=(tcpserver,)))
|
||||
|
||||
for thread in threads:
|
||||
thread.start()
|
||||
try:
|
||||
banner("log_test0", "begin")
|
||||
|
||||
rootLogger.addHandler(hdlr)
|
||||
test0()
|
||||
rootLogger.removeHandler(hdlr)
|
||||
|
||||
banner("log_test0", "end")
|
||||
|
||||
banner("log_test1", "begin")
|
||||
test1()
|
||||
banner("log_test1", "end")
|
||||
|
||||
banner("log_test2", "begin")
|
||||
test2()
|
||||
banner("log_test2", "end")
|
||||
|
||||
banner("log_test3", "begin")
|
||||
test3()
|
||||
banner("log_test3", "end")
|
||||
|
||||
banner("logrecv output", "begin")
|
||||
sys.stdout.write(sockOut.getvalue())
|
||||
sockOut.close()
|
||||
banner("logrecv output", "end")
|
||||
|
||||
finally:
|
||||
#shut down server
|
||||
tcpserver.abort = 1
|
||||
for thread in threads:
|
||||
thread.join()
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.stdout.write("test_logging\n")
|
||||
test_main()
|
||||
sys.stdout.flush()
|
||||
Loading…
Add table
Add a link
Reference in a new issue