summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam@afuera.me.uk>2014-08-29 22:18:47 (GMT)
committerSam Thursfield <sam@afuera.me.uk>2014-09-01 10:26:53 (GMT)
commit354253df295bb2815a9d5e0744b3aa98eea6aad9 (patch)
treec57313e6eca50816db6c1649dd4c4ff22d0d5465
parent6fba43005c52930ce0175df18122264c2f193448 (diff)
downloadmorph-354253df295bb2815a9d5e0744b3aa98eea6aad9.tar.gz
deploy: Make Python extensions log debug messages to MORPH_LOG_FD by default
Previously logging was disabled for Python deploy extensions. We get a lot of useful information for free in the log file by doing this: the environment will be written when the subprocess starts, and if it crashes the full backtrace will be written there too. Subcommand execution with cliapp.runcmd() will also be logged.
-rw-r--r--morphlib/writeexts.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/morphlib/writeexts.py b/morphlib/writeexts.py
index c3605b1..5102bfd 100644
--- a/morphlib/writeexts.py
+++ b/morphlib/writeexts.py
@@ -89,7 +89,30 @@ class WriteExtension(cliapp.Application):
write extensions.
'''
-
+
+ def setup_logging(self):
+ '''Direct all logging output to MORPH_LOG_FD, if set.
+
+ This file descriptor is read by Morph and written into its own log
+ file.
+
+ This overrides cliapp's usual configurable logging setup.
+
+ '''
+ log_write_fd = int(os.environ.get('MORPH_LOG_FD', 0))
+
+ if log_write_fd == 0:
+ return
+
+ formatter = logging.Formatter('%(message)s')
+
+ handler = logging.StreamHandler(os.fdopen(log_write_fd, 'w'))
+ handler.setFormatter(formatter)
+
+ logger = logging.getLogger()
+ logger.addHandler(handler)
+ logger.setLevel(logging.DEBUG)
+
def process_args(self, args):
raise NotImplementedError()