87 ) |
86 ) |
88 configitem('blackbox', 'date-format', |
87 configitem('blackbox', 'date-format', |
89 default='%Y/%m/%d %H:%M:%S', |
88 default='%Y/%m/%d %H:%M:%S', |
90 ) |
89 ) |
91 |
90 |
92 def _openlogfile(ui, vfs, name, maxfiles=0, maxsize=0): |
91 _lastlogger = loggingutil.proxylogger() |
93 def rotate(oldpath, newpath): |
|
94 try: |
|
95 vfs.unlink(newpath) |
|
96 except OSError as err: |
|
97 if err.errno != errno.ENOENT: |
|
98 ui.debug("warning: cannot remove '%s': %s\n" % |
|
99 (newpath, err.strerror)) |
|
100 try: |
|
101 if newpath: |
|
102 vfs.rename(oldpath, newpath) |
|
103 except OSError as err: |
|
104 if err.errno != errno.ENOENT: |
|
105 ui.debug("warning: cannot rename '%s' to '%s': %s\n" % |
|
106 (newpath, oldpath, err.strerror)) |
|
107 |
|
108 if maxsize > 0: |
|
109 try: |
|
110 st = vfs.stat(name) |
|
111 except OSError: |
|
112 pass |
|
113 else: |
|
114 if st.st_size >= maxsize: |
|
115 path = vfs.join(name) |
|
116 for i in pycompat.xrange(maxfiles - 1, 1, -1): |
|
117 rotate(oldpath='%s.%d' % (path, i - 1), |
|
118 newpath='%s.%d' % (path, i)) |
|
119 rotate(oldpath=path, |
|
120 newpath=maxfiles > 0 and path + '.1') |
|
121 return vfs(name, 'a', makeparentdirs=False) |
|
122 |
|
123 class proxylogger(object): |
|
124 """Forward log events to another logger to be set later""" |
|
125 |
|
126 def __init__(self): |
|
127 self.logger = None |
|
128 |
|
129 def tracked(self, event): |
|
130 return self.logger is not None and self.logger.tracked(event) |
|
131 |
|
132 def log(self, ui, event, msg, opts): |
|
133 assert self.logger is not None |
|
134 self.logger.log(ui, event, msg, opts) |
|
135 |
|
136 _lastlogger = proxylogger() |
|
137 |
92 |
138 class blackboxlogger(object): |
93 class blackboxlogger(object): |
139 def __init__(self, ui, repo): |
94 def __init__(self, ui, repo): |
140 self._repo = repo |
95 self._repo = repo |
141 self._trackedevents = set(ui.configlist('blackbox', 'track')) |
96 self._trackedevents = set(ui.configlist('blackbox', 'track')) |
163 else: |
118 else: |
164 src = '' |
119 src = '' |
165 try: |
120 try: |
166 fmt = '%s %s @%s%s (%s)%s> %s' |
121 fmt = '%s %s @%s%s (%s)%s> %s' |
167 args = (date, user, rev, changed, pid, src, msg) |
122 args = (date, user, rev, changed, pid, src, msg) |
168 with _openlogfile(ui, self._repo.vfs, name='blackbox.log', |
123 with loggingutil.openlogfile( |
169 maxfiles=self._maxfiles, |
124 ui, self._repo.vfs, name='blackbox.log', |
170 maxsize=self._maxsize) as fp: |
125 maxfiles=self._maxfiles, maxsize=self._maxsize) as fp: |
171 fp.write(fmt % args) |
126 fp.write(fmt % args) |
172 except (IOError, OSError) as err: |
127 except (IOError, OSError) as err: |
173 # deactivate this to avoid failed logging again |
128 # deactivate this to avoid failed logging again |
174 self._trackedevents.clear() |
129 self._trackedevents.clear() |
175 ui.debug('warning: cannot write to blackbox.log: %s\n' % |
130 ui.debug('warning: cannot write to blackbox.log: %s\n' % |