Mercurial > hg
annotate mercurial/loggingutil.py @ 50404:64cdd80d6909
branching: merge stable into default
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Fri, 24 Mar 2023 10:43:47 +0100 |
parents | d44e3c45f0e4 |
children | f4733654f144 |
rev | line source |
---|---|
40799
03127e580980
loggingutil: extract openlogfile() and proxylogger to new module
Yuya Nishihara <yuya@tcha.org>
parents:
40798
diff
changeset
|
1 # loggingutil.py - utility for logging events |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
2 # |
18676 | 3 # Copyright 2010 Nicolas Dumazet |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
4 # Copyright 2013 Facebook, Inc. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
5 # |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
7 # GNU General Public License version 2 or any later version. |
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
8 |
28090
8113c88b8e6d
blackbox: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28027
diff
changeset
|
9 |
8113c88b8e6d
blackbox: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28027
diff
changeset
|
10 import errno |
8113c88b8e6d
blackbox: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28027
diff
changeset
|
11 |
46892
4a6024b87dfc
blackbox: fix type error on log rotation on read-only filesystem
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
43077
diff
changeset
|
12 from . import ( |
4a6024b87dfc
blackbox: fix type error on log rotation on read-only filesystem
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
43077
diff
changeset
|
13 encoding, |
4a6024b87dfc
blackbox: fix type error on log rotation on read-only filesystem
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
43077
diff
changeset
|
14 ) |
18669
18242716a014
blackbox: adds a blackbox extension
Durham Goode <durham@fb.com>
parents:
diff
changeset
|
15 |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
16 from .utils import ( |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
17 dateutil, |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
18 procutil, |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
19 stringutil, |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
20 ) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
21 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
22 |
40799
03127e580980
loggingutil: extract openlogfile() and proxylogger to new module
Yuya Nishihara <yuya@tcha.org>
parents:
40798
diff
changeset
|
23 def openlogfile(ui, vfs, name, maxfiles=0, maxsize=0): |
40800
698477777883
loggingutil: document openlogfile()
Yuya Nishihara <yuya@tcha.org>
parents:
40799
diff
changeset
|
24 """Open log file in append mode, with optional rotation |
698477777883
loggingutil: document openlogfile()
Yuya Nishihara <yuya@tcha.org>
parents:
40799
diff
changeset
|
25 |
698477777883
loggingutil: document openlogfile()
Yuya Nishihara <yuya@tcha.org>
parents:
40799
diff
changeset
|
26 If maxsize > 0, the log file will be rotated up to maxfiles. |
698477777883
loggingutil: document openlogfile()
Yuya Nishihara <yuya@tcha.org>
parents:
40799
diff
changeset
|
27 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
28 |
34300
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
29 def rotate(oldpath, newpath): |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
30 try: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
31 vfs.unlink(newpath) |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
32 except OSError as err: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
33 if err.errno != errno.ENOENT: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
34 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
35 b"warning: cannot remove '%s': %s\n" |
46892
4a6024b87dfc
blackbox: fix type error on log rotation on read-only filesystem
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
43077
diff
changeset
|
36 % (newpath, encoding.strtolocal(err.strerror)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
37 ) |
34300
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
38 try: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
39 if newpath: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
40 vfs.rename(oldpath, newpath) |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
41 except OSError as err: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
42 if err.errno != errno.ENOENT: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
43 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
44 b"warning: cannot rename '%s' to '%s': %s\n" |
46892
4a6024b87dfc
blackbox: fix type error on log rotation on read-only filesystem
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
43077
diff
changeset
|
45 % (newpath, oldpath, encoding.strtolocal(err.strerror)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
46 ) |
34300
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
47 |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
48 if maxsize > 0: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
49 try: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
50 st = vfs.stat(name) |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
51 except OSError: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
52 pass |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
53 else: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
54 if st.st_size >= maxsize: |
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
55 path = vfs.join(name) |
49284
d44e3c45f0e4
py3: replace `pycompat.xrange` by `range`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
56 for i in range(maxfiles - 1, 1, -1): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
57 rotate( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
58 oldpath=b'%s.%d' % (path, i - 1), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
59 newpath=b'%s.%d' % (path, i), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
60 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
61 rotate(oldpath=path, newpath=maxfiles > 0 and path + b'.1') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
62 return vfs(name, b'a', makeparentdirs=False) |
34300
e6723c939344
blackbox: move _openlogfile to a separate method
Jun Wu <quark@fb.com>
parents:
34299
diff
changeset
|
63 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
64 |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
65 def _formatlogline(msg): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
66 date = dateutil.datestr(format=b'%Y/%m/%d %H:%M:%S') |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
67 pid = procutil.getpid() |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
68 return b'%s (%d)> %s' % (date, pid, msg) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
69 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
70 |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
71 def _matchevent(event, tracked): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
72 return b'*' in tracked or event in tracked |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
73 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
74 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
75 class filelogger: |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
76 """Basic logger backed by physical file with optional rotation""" |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
77 |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
78 def __init__(self, vfs, name, tracked, maxfiles=0, maxsize=0): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
79 self._vfs = vfs |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
80 self._name = name |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
81 self._trackedevents = set(tracked) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
82 self._maxfiles = maxfiles |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
83 self._maxsize = maxsize |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
84 |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
85 def tracked(self, event): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
86 return _matchevent(event, self._trackedevents) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
87 |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
88 def log(self, ui, event, msg, opts): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
89 line = _formatlogline(msg) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
90 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
91 with openlogfile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
92 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
93 self._vfs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
94 self._name, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
95 maxfiles=self._maxfiles, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
96 maxsize=self._maxsize, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
97 ) as fp: |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
98 fp.write(line) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
99 except IOError as err: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
100 ui.debug( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
101 b'cannot write to %s: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
102 % (self._name, stringutil.forcebytestr(err)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
103 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
104 |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
105 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
106 class fileobjectlogger: |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
107 """Basic logger backed by file-like object""" |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
108 |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
109 def __init__(self, fp, tracked): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
110 self._fp = fp |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
111 self._trackedevents = set(tracked) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
112 |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
113 def tracked(self, event): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
114 return _matchevent(event, self._trackedevents) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
115 |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
116 def log(self, ui, event, msg, opts): |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
117 line = _formatlogline(msg) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
118 try: |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
119 self._fp.write(line) |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
120 self._fp.flush() |
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
121 except IOError as err: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
122 ui.debug( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
123 b'cannot write to %s: %s\n' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
124 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
125 stringutil.forcebytestr(self._fp.name), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
126 stringutil.forcebytestr(err), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
127 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
128 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40821
diff
changeset
|
129 |
40821
96be0ecad648
loggingutil: add basic logger backends
Yuya Nishihara <yuya@tcha.org>
parents:
40800
diff
changeset
|
130 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
131 class proxylogger: |
40762
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
132 """Forward log events to another logger to be set later""" |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
133 |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
134 def __init__(self): |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
135 self.logger = None |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
136 |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
137 def tracked(self, event): |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
138 return self.logger is not None and self.logger.tracked(event) |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
139 |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
140 def log(self, ui, event, msg, opts): |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
141 assert self.logger is not None |
37d6ee46a965
blackbox: extract global last logger to proxylogger class
Yuya Nishihara <yuya@tcha.org>
parents:
40760
diff
changeset
|
142 self.logger.log(ui, event, msg, opts) |