OLD | NEW |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
4 | 4 |
5 """Utilities for logging. | 5 """Utilities for logging. |
6 | 6 |
7 Example usage: | 7 Example usage: |
8 | 8 |
9 .. code-block:: python | 9 .. code-block:: python |
10 | 10 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 _add_file_handlers(options, logger) | 251 _add_file_handlers(options, logger) |
252 | 252 |
253 | 253 |
254 def _add_file_handlers(options, logger): # pragma: no cover | 254 def _add_file_handlers(options, logger): # pragma: no cover |
255 # Test whether we can write to the log directory. If not, write to a | 255 # Test whether we can write to the log directory. If not, write to a |
256 # temporary directory instead. One of the DEFAULT_LOG_DIRECTORIES are created | 256 # temporary directory instead. One of the DEFAULT_LOG_DIRECTORIES are created |
257 # on the real production machines by puppet, so /tmp should only be used when | 257 # on the real production machines by puppet, so /tmp should only be used when |
258 # running locally on developers' workstations. | 258 # running locally on developers' workstations. |
259 logs_directory = tempfile.gettempdir() | 259 logs_directory = tempfile.gettempdir() |
260 for directory in options.logs_directory.split(os.pathsep): | 260 for directory in options.logs_directory.split(os.pathsep): |
| 261 if not os.path.isdir(directory): |
| 262 continue |
| 263 |
261 try: | 264 try: |
262 with tempfile.TemporaryFile(dir=directory): | 265 with tempfile.TemporaryFile(dir=directory): |
263 pass | 266 pass |
264 except OSError: | 267 except OSError: |
265 pass | 268 pass |
266 else: | 269 else: |
267 logs_directory = directory | 270 logs_directory = directory |
268 break | 271 break |
269 | 272 |
270 # Log files are named with this pattern: | 273 # Log files are named with this pattern: |
(...skipping 12 matching lines...) Expand all Loading... |
283 for level in file_levels: | 286 for level in file_levels: |
284 add_handler( | 287 add_handler( |
285 logger, | 288 logger, |
286 handler=logging.handlers.RotatingFileHandler( | 289 handler=logging.handlers.RotatingFileHandler( |
287 filename=os.path.join( | 290 filename=os.path.join( |
288 logs_directory, pattern % logging.getLevelName(level)), | 291 logs_directory, pattern % logging.getLevelName(level)), |
289 maxBytes=10 * 1024 * 1024, | 292 maxBytes=10 * 1024 * 1024, |
290 backupCount=10, | 293 backupCount=10, |
291 delay=True), | 294 delay=True), |
292 level=level) | 295 level=level) |
OLD | NEW |