Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
synapse
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Container Registry
Model registry
Monitor
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Maunium
synapse
Commits
fa955cc2
Commit
fa955cc2
authored
10 years ago
by
Mark Haines
Browse files
Options
Downloads
Patches
Plain Diff
Pep8 and a few doc strings
parent
b29517bd
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
synapse/config/logger.py
+3
-3
3 additions, 3 deletions
synapse/config/logger.py
synapse/util/logcontext.py
+37
-14
37 additions, 14 deletions
synapse/util/logcontext.py
with
40 additions
and
17 deletions
synapse/config/logger.py
+
3
−
3
View file @
fa955cc2
...
@@ -19,6 +19,7 @@ from twisted.python.log import PythonLoggingObserver
...
@@ -19,6 +19,7 @@ from twisted.python.log import PythonLoggingObserver
import
logging
import
logging
import
logging.config
import
logging.config
class
LoggingConfig
(
Config
):
class
LoggingConfig
(
Config
):
def
__init__
(
self
,
args
):
def
__init__
(
self
,
args
):
super
(
LoggingConfig
,
self
).
__init__
(
args
)
super
(
LoggingConfig
,
self
).
__init__
(
args
)
...
@@ -52,9 +53,9 @@ class LoggingConfig(Config):
...
@@ -52,9 +53,9 @@ class LoggingConfig(Config):
level
=
logging
.
INFO
level
=
logging
.
INFO
if
self
.
verbosity
:
if
self
.
verbosity
:
level
=
logging
.
DEBUG
level
=
logging
.
DEBUG
# FIXME: we need a logging.WARN for a -q quiet option
# FIXME: we need a logging.WARN for a -q quiet option
logger
=
logging
.
getLogger
(
''
)
logger
=
logging
.
getLogger
(
''
)
logger
.
setLevel
(
level
)
logger
.
setLevel
(
level
)
formatter
=
logging
.
Formatter
(
log_format
)
formatter
=
logging
.
Formatter
(
log_format
)
...
@@ -62,7 +63,6 @@ class LoggingConfig(Config):
...
@@ -62,7 +63,6 @@ class LoggingConfig(Config):
handler
=
logging
.
FileHandler
(
self
.
log_file
)
handler
=
logging
.
FileHandler
(
self
.
log_file
)
else
:
else
:
handler
=
logging
.
StreamHandler
()
handler
=
logging
.
StreamHandler
()
print
handler
handler
.
setFormatter
(
formatter
)
handler
.
setFormatter
(
formatter
)
handler
.
addFilter
(
LoggingContextFilter
(
request
=
""
))
handler
.
addFilter
(
LoggingContextFilter
(
request
=
""
))
...
...
This diff is collapsed.
Click to expand it.
synapse/util/logcontext.py
+
37
−
14
View file @
fa955cc2
from
functools
import
wraps
import
threading
import
threading
import
logging
import
logging
class
LoggingContext
(
object
):
class
LoggingContext
(
object
):
"""
Additional context for log formatting. Contexts are scoped within a
"
with
"
block. Contexts inherit the state of their parent contexts.
Args:
name (str): Name for the context for debugging.
"""
__slots__
=
[
"
parent_context
"
,
"
name
"
,
"
__dict__
"
]
__slots__
=
[
"
parent_context
"
,
"
name
"
,
"
__dict__
"
]
thread_local
=
threading
.
local
()
thread_local
=
threading
.
local
()
class
Sentinel
(
object
):
class
Sentinel
(
object
):
"""
Sentinel to represent the root context
"""
__slots__
=
[]
__slots__
=
[]
def
copy_to
(
self
,
record
):
def
copy_to
(
self
,
record
):
pass
pass
...
@@ -20,13 +28,15 @@ class LoggingContext(object):
...
@@ -20,13 +28,15 @@ class LoggingContext(object):
self
.
name
=
name
self
.
name
=
name
def
__str__
(
self
):
def
__str__
(
self
):
return
"
%s@%x
"
%
(
self
.
name
,
id
(
self
))
return
"
%s@%x
"
%
(
self
.
name
,
id
(
self
))
@classmethod
@classmethod
def
current_context
(
cls
):
def
current_context
(
cls
):
"""
Get the current logging context from thread local storage
"""
return
getattr
(
cls
.
thread_local
,
"
current_context
"
,
cls
.
sentinel
)
return
getattr
(
cls
.
thread_local
,
"
current_context
"
,
cls
.
sentinel
)
def
__enter__
(
self
):
def
__enter__
(
self
):
"""
Enters this logging context into thread local storage
"""
if
self
.
parent_context
is
not
None
:
if
self
.
parent_context
is
not
None
:
raise
Exception
(
"
Attempt to enter logging context multiple times
"
)
raise
Exception
(
"
Attempt to enter logging context multiple times
"
)
self
.
parent_context
=
self
.
current_context
()
self
.
parent_context
=
self
.
current_context
()
...
@@ -34,6 +44,11 @@ class LoggingContext(object):
...
@@ -34,6 +44,11 @@ class LoggingContext(object):
return
self
return
self
def
__exit__
(
self
,
type
,
value
,
traceback
):
def
__exit__
(
self
,
type
,
value
,
traceback
):
"""
Restore the logging context in thread local storage to the state it
was before this context was entered.
Returns:
None to avoid suppressing any exeptions that were thrown.
"""
if
self
.
thread_local
.
current_context
is
not
self
:
if
self
.
thread_local
.
current_context
is
not
self
:
logging
.
error
(
logging
.
error
(
"
Current logging context %s is not the expected context %s
"
,
"
Current logging context %s is not the expected context %s
"
,
...
@@ -44,29 +59,32 @@ class LoggingContext(object):
...
@@ -44,29 +59,32 @@ class LoggingContext(object):
self
.
parent_context
=
None
self
.
parent_context
=
None
def
__getattr__
(
self
,
name
):
def
__getattr__
(
self
,
name
):
"""
Delegate member lookup to parent context
"""
return
getattr
(
self
.
parent_context
,
name
)
return
getattr
(
self
.
parent_context
,
name
)
def
copy_to
(
self
,
record
):
def
copy_to
(
self
,
record
):
"""
Copy fields from this context and its parents to the record
"""
if
self
.
parent_context
is
not
None
:
if
self
.
parent_context
is
not
None
:
self
.
parent_context
.
copy_to
(
record
)
self
.
parent_context
.
copy_to
(
record
)
for
key
,
value
in
self
.
__dict__
.
items
():
for
key
,
value
in
self
.
__dict__
.
items
():
setattr
(
record
,
key
,
value
)
setattr
(
record
,
key
,
value
)
@classmethod
def
wrap_callback
(
cls
,
callback
):
context
=
cls
.
current_context
()
@wraps
(
callback
)
def
wrapped
(
*
args
,
**
kargs
):
cls
.
thread_local
.
current_context
=
context
return
callback
(
*
args
,
**
kargs
)
return
wrapped
class
LoggingContextFilter
(
logging
.
Filter
):
class
LoggingContextFilter
(
logging
.
Filter
):
"""
Logging filter that adds values from the current logging context to each
record.
Args:
**defaults: Default values to avoid formatters complaining about
missing fields
"""
def
__init__
(
self
,
**
defaults
):
def
__init__
(
self
,
**
defaults
):
self
.
defaults
=
defaults
self
.
defaults
=
defaults
def
filter
(
self
,
record
):
def
filter
(
self
,
record
):
"""
Add each fields from the logging contexts to the record.
Returns:
True to include the record in the log output.
"""
context
=
LoggingContext
.
current_context
()
context
=
LoggingContext
.
current_context
()
for
key
,
value
in
self
.
defaults
.
items
():
for
key
,
value
in
self
.
defaults
.
items
():
setattr
(
record
,
key
,
value
)
setattr
(
record
,
key
,
value
)
...
@@ -75,11 +93,16 @@ class LoggingContextFilter(logging.Filter):
...
@@ -75,11 +93,16 @@ class LoggingContextFilter(logging.Filter):
class
PreserveLoggingContext
(
object
):
class
PreserveLoggingContext
(
object
):
"""
Captures the current logging context and restores it when the scope is
exited. Used to restore the context after a function using
@defer.inlineCallbacks is resumed by a callback from the reactor.
"""
__slots__
=
[
"
current_context
"
]
__slots__
=
[
"
current_context
"
]
def
__enter__
(
self
):
def
__enter__
(
self
):
"""
Captures the current logging context
"""
self
.
current_context
=
LoggingContext
.
current_context
()
self
.
current_context
=
LoggingContext
.
current_context
()
def
__exit__
(
self
,
type
,
value
,
traceback
):
def
__exit__
(
self
,
type
,
value
,
traceback
):
"""
Restores the current logging context
"""
LoggingContext
.
thread_local
.
current_context
=
self
.
current_context
LoggingContext
.
thread_local
.
current_context
=
self
.
current_context
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment