Merge lp:~allenap/maas/make-debug-logs-prettier--bug-1633696 into lp:~maas-committers/maas/trunk

Proposed by Gavin Panella
Status: Merged
Approved by: Gavin Panella
Approved revision: no longer in the source branch.
Merged at revision: 5888
Proposed branch: lp:~allenap/maas/make-debug-logs-prettier--bug-1633696
Merge into: lp:~maas-committers/maas/trunk
Diff against target: 173 lines (+88/-0)
4 files modified
src/provisioningserver/logger/_twisted.py (+43/-0)
src/provisioningserver/logger/testing/logsomething.py (+2/-0)
src/provisioningserver/logger/tests/test__twisted.py (+39/-0)
src/provisioningserver/logger/tests/test_logger.py (+4/-0)
To merge this branch: bzr merge lp:~allenap/maas/make-debug-logs-prettier--bug-1633696
Reviewer Review Type Date Requested Status
Blake Rouse (community) Approve
Review via email: mp+321449@code.launchpad.net

Commit message

Print "regiond" or "rackd" instead of "twisted.python.log" in log files.

To post a comment you must log in.
Revision history for this message
Blake Rouse (blake-rouse) wrote :

Can you give an example of the difference?

review: Needs Information
Revision history for this message
Gavin Panella (allenap) wrote :

A log line like:

  2017-03-26 07:38:47 twisted.python.log: [info] ::ffff:192.168.1.3 - - [26/Mar/2017:06:38:46 +0000] "GET /MAAS/rpc/ HTTP/1.0" 200 208 "-" "provisioningserver.rpc.clusterservice.ClusterClientService"

will instead be:

  2017-03-26 07:38:47 regiond: [info] ::ffff:192.168.1.3 - - [26/Mar/2017:06:38:46 +0000] "GET /MAAS/rpc/ HTTP/1.0" 200 208 "-" "provisioningserver.rpc.clusterservice.ClusterClientService"

I am also, separately, making this log overall a bit shorter.

Revision history for this message
Blake Rouse (blake-rouse) wrote :

Nice! Love it!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'src/provisioningserver/logger/_twisted.py'
2--- src/provisioningserver/logger/_twisted.py 2016-12-07 12:46:14 +0000
3+++ src/provisioningserver/logger/_twisted.py 2017-03-30 13:04:30 +0000
4@@ -10,6 +10,7 @@
5 "VerbosityOptions",
6 ]
7
8+import os
9 import re
10 import sys
11 import warnings
12@@ -75,6 +76,11 @@
13 "No startLoggingWithObserver function found; please investigate!"))
14 twistedLegacy.startLoggingWithObserver = _startLoggingWithObserver
15
16+ # Set the legacy `logfile` namespace according to the environment in which
17+ # we guess we're running. This `logfile` is used primarily — in MAAS — by
18+ # Twisted's HTTP server machinery for combined access logging.
19+ twistedLegacy.logfile.log.namespace = _getCommandName(sys.argv)
20+
21 # Customise warnings behaviour. Ensure that nothing else — neither the
22 # standard library's `logging` module nor Django — clobbers this later.
23 warn_unless(warnings.showwarning.__module__ == warnings.__name__, (
24@@ -183,6 +189,43 @@
25 return system.split("._")[0]
26
27
28+def _getCommandName(argv):
29+ """Return a guess at the currently running command's name.
30+
31+ When running under `twistd`, it will return "regiond", "rackd", or
32+ "daemon". The latter is unlikely to happen, but it's a safe default.
33+
34+ Otherwise it assumes a command is being run and tries to derive a name
35+ from the script being run.
36+ """
37+ if any("twist" in arg for arg in argv):
38+ if any("maas-regiond" in arg for arg in argv):
39+ return "regiond"
40+ elif any("maas-rackd" in arg for arg in argv):
41+ return "rackd"
42+ else:
43+ # Return a safe default.
44+ return "daemon"
45+ else:
46+ candidates = map(os.path.basename, argv)
47+ try:
48+ command = next(candidates)
49+ if "python" in command:
50+ command = next(candidates)
51+ except StopIteration:
52+ # Return a safe default.
53+ return "command"
54+ else:
55+ if command.startswith("-"):
56+ # It's probably a command-line option.
57+ return "command"
58+ elif command.endswith(".py"):
59+ # Remove the .py suffix.
60+ return command[:-3]
61+ else:
62+ return command
63+
64+
65 class LegacyLogger(twistedModern.Logger):
66 """Looks like a stripped-down `t.p.log` module, logs to a `Logger`.
67
68
69=== modified file 'src/provisioningserver/logger/testing/logsomething.py'
70--- src/provisioningserver/logger/testing/logsomething.py 2017-03-29 13:34:55 +0000
71+++ src/provisioningserver/logger/testing/logsomething.py 2017-03-30 13:04:30 +0000
72@@ -62,6 +62,8 @@
73
74 # Twisted, legacy.
75 twisted.python.log.msg("From `twisted.python.log`.", system=options.name)
76+ # Twisted, legacy `logfile`. This has its own namespace.
77+ twisted.python.log.logfile.write("From `twisted.python.log.logfile`.\n")
78
79 # Standard library.
80 logging.getLogger(options.name).debug("From `logging`.")
81
82=== modified file 'src/provisioningserver/logger/tests/test__twisted.py'
83--- src/provisioningserver/logger/tests/test__twisted.py 2016-12-07 12:46:14 +0000
84+++ src/provisioningserver/logger/tests/test__twisted.py 2017-03-30 13:04:30 +0000
85@@ -14,6 +14,7 @@
86 from provisioningserver.logger._common import DEFAULT_LOG_FORMAT_DATE
87 from provisioningserver.logger._twisted import (
88 _formatModernEvent,
89+ _getCommandName,
90 _getSystemName,
91 EventLogger,
92 LegacyLogger,
93@@ -252,6 +253,44 @@
94 Equals(self.string_out))
95
96
97+class TestGetCommandName(MAASTestCase):
98+ """Tests for `_getCommandName`."""
99+
100+ expectations = {
101+ # maas-rackd
102+ ("/usr/bin/twistd3", "--nodaemon", "--pidfile=",
103+ "--logger=provisioningserver.logger.EventLogger",
104+ "maas-rackd"): "rackd",
105+ # maas-regiond
106+ ("twistd3", "--nodaemon", "--pidfile=",
107+ "--logger=provisioningserver.logger.EventLogger",
108+ "maas-regiond"): "regiond",
109+ # twistd running ...
110+ ("twistd3", "--an-option",
111+ "something-else"): "daemon",
112+ # command
113+ ("some-command", ): "some-command",
114+ # command with .py suffix
115+ ("some-command-with-suffix.py", ): "some-command-with-suffix",
116+ # command running under python
117+ ("python", "py-command", ): "py-command",
118+ # command running under python with .py suffix
119+ ("python", "py-command-with-suffix.py", ): "py-command-with-suffix",
120+ # something else
121+ ("python", "-c", "print('woo')"): "command",
122+ }
123+
124+ scenarios = tuple(
125+ (expected, {"argv": argv, "expected": expected})
126+ for argv, expected in expectations.items()
127+ )
128+
129+ def test(self):
130+ self.assertThat(
131+ _getCommandName(self.argv),
132+ Equals(self.expected))
133+
134+
135 class TestFormatModernEvent(MAASTestCase):
136 """Tests for `_formatModernEvent`."""
137
138
139=== modified file 'src/provisioningserver/logger/tests/test_logger.py'
140--- src/provisioningserver/logger/tests/test_logger.py 2016-12-07 12:46:14 +0000
141+++ src/provisioningserver/logger/tests/test_logger.py 2017-03-30 13:04:30 +0000
142@@ -90,6 +90,7 @@
143 (name, 'warn', 'From `twisted.logger`.'),
144 (name, 'error', 'From `twisted.logger`.'),
145 (name, 'info', 'From `twisted.python.log`.'),
146+ ('logsomething', 'info', 'From `twisted.python.log.logfile`.'),
147 (name, 'info', 'From `logging`.'),
148 (name, 'warn', 'From `logging`.'),
149 (name, 'error', 'From `logging`.'),
150@@ -116,6 +117,7 @@
151 (name, 'warn', 'From `twisted.logger`.'),
152 (name, 'error', 'From `twisted.logger`.'),
153 (name, 'info', 'From `twisted.python.log`.'),
154+ ('logsomething', 'info', 'From `twisted.python.log.logfile`.'),
155 (name, 'debug', 'From `logging`.'),
156 (name, 'info', 'From `logging`.'),
157 (name, 'warn', 'From `logging`.'),
158@@ -179,6 +181,7 @@
159 (name, 'warn', 'From `twisted.logger`.'),
160 (name, 'error', 'From `twisted.logger`.'),
161 (name, 'info', 'From `twisted.python.log`.'),
162+ ('logsomething', 'info', 'From `twisted.python.log.logfile`.'),
163 (name, 'info', 'From `logging`.'),
164 (name, 'warn', 'From `logging`.'),
165 (name, 'error', 'From `logging`.'),
166@@ -208,6 +211,7 @@
167 (name, 'warn', 'From `twisted.logger`.'),
168 (name, 'error', 'From `twisted.logger`.'),
169 (name, 'info', 'From `twisted.python.log`.'),
170+ ('logsomething', 'info', 'From `twisted.python.log.logfile`.'),
171 (name, 'debug', 'From `logging`.'),
172 (name, 'info', 'From `logging`.'),
173 (name, 'warn', 'From `logging`.'),