##// END OF EJS Templates
hg: Redirect Mercurial stdout/stderr to logging when running as WSGI...
Mads Kiilerich -
r8795:fe050a93 stable
parent child Browse files
Show More
@@ -20,6 +20,7 b' from kallithea.config.middleware.simpleg'
20 from kallithea.config.middleware.simplehg import SimpleHg
20 from kallithea.config.middleware.simplehg import SimpleHg
21 from kallithea.config.middleware.wrapper import RequestWrapper
21 from kallithea.config.middleware.wrapper import RequestWrapper
22 from kallithea.lib.utils2 import asbool
22 from kallithea.lib.utils2 import asbool
23 from kallithea.lib.vcs.utils import hgcompat
23
24
24
25
25 __all__ = ['make_app']
26 __all__ = ['make_app']
@@ -50,6 +51,7 b' def wrap_app(app):'
50 def make_app(global_conf, **app_conf):
51 def make_app(global_conf, **app_conf):
51 """Return WSGI app with logging Mercurial stdout/stderr - to be used as
52 """Return WSGI app with logging Mercurial stdout/stderr - to be used as
52 Paste or mod_wsgi entry point"""
53 Paste or mod_wsgi entry point"""
54 hgcompat.redirect_stdio_to_logging()
53 return make_app_raw(global_conf, **app_conf)
55 return make_app_raw(global_conf, **app_conf)
54
56
55
57
@@ -2,10 +2,25 b''
2 Mercurial libs compatibility
2 Mercurial libs compatibility
3 """
3 """
4
4
5 import logging
6
5 import mercurial.encoding
7 import mercurial.encoding
6 import mercurial.localrepo
8 import mercurial.localrepo
7
9
8
10
11 class MercurialStdLogger:
12 def __init__(self, logger):
13 self.logger = logger
14
15 def write(self, message):
16 try:
17 self.logger(message.decode().rstrip())
18 except:
19 self.logger(message)
20
21 def flush(self):
22 pass
23
9 def monkey_do():
24 def monkey_do():
10 """Apply some Mercurial monkey patching"""
25 """Apply some Mercurial monkey patching"""
11 # workaround for 3.3 94ac64bcf6fe and not calling largefiles reposetup correctly, and test_archival failing
26 # workaround for 3.3 94ac64bcf6fe and not calling largefiles reposetup correctly, and test_archival failing
@@ -15,3 +30,18 b' def monkey_do():'
15
30
16 # Minimize potential impact from custom configuration
31 # Minimize potential impact from custom configuration
17 mercurial.encoding.environ[b'HGPLAIN'] = b'1'
32 mercurial.encoding.environ[b'HGPLAIN'] = b'1'
33
34
35 hglog = logging.getLogger("mercurial")
36
37
38 def redirect_stdio_to_logging():
39 # Capture Mercurial stdout/stderr and send to a 'mercurial' logger
40 try:
41 import mercurial.utils.procutil as procutil
42 if not isinstance(procutil.stdout, MercurialStdLogger):
43 procutil.stdout = MercurialStdLogger(hglog.info)
44 if not isinstance(procutil.stderr, MercurialStdLogger):
45 procutil.stderr = MercurialStdLogger(hglog.warning)
46 except Exception as e:
47 hglog.error("Exception installing procutil stdout/stderr: %s", e)
General Comments 0
You need to be logged in to leave comments. Login now