Skip to content

Commit

Permalink
Merge 392f6a6 into 6e96e77
Browse files Browse the repository at this point in the history
  • Loading branch information
mr-ping committed Aug 11, 2015
2 parents 6e96e77 + 392f6a6 commit 71a540e
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 4 deletions.
26 changes: 22 additions & 4 deletions tornado/log.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,10 +190,19 @@ def enable_pretty_logging(options=None, logger=None):
logger = logging.getLogger()
logger.setLevel(getattr(logging, options.logging.upper()))
if options.log_file_prefix:
channel = logging.handlers.RotatingFileHandler(
filename=options.log_file_prefix,
maxBytes=options.log_file_max_size,
backupCount=options.log_file_num_backups)
if options.log_rotate_mode == 'size':
channel = logging.handlers.RotatingFileHandler(
filename=options.log_file_prefix,
maxBytes=options.log_file_max_size,
backupCount=options.log_file_num_backups)
elif options.log_rotate_mode == 'time':
channel = logging.handlers.TimedRotatingFileHandler(
filename=options.log_file_prefix,
when=options.log_rotate_when,
interval=options.log_rotate_interval,
backupCount=options.log_file_num_backups)
else:
channel = logging.NullHandler()
channel.setFormatter(LogFormatter(color=False))
logger.addHandler(channel)

Expand Down Expand Up @@ -235,4 +244,13 @@ def define_logging_options(options=None):
options.define("log_file_num_backups", type=int, default=10,
help="number of log files to keep")

options.define("log_rotate_when", type=str, default='midnight',
help=("specify the type of TimedRotatingFileHandler interval "
"other options:('S', 'M', 'H', 'D', 'W0'-'W6')"))
options.define("log_rotate_interval", type=int, default=1,
help="The interval value of timed rotating")

options.define("log_rotate_mode", type=str, default='size',
help="The mode of rotating files(time or size)")

options.add_parse_callback(lambda: enable_pretty_logging(options))
23 changes: 23 additions & 0 deletions tornado/test/log_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import sys
import tempfile
import warnings
import time

from tornado.escape import utf8
from tornado.log import LogFormatter, define_logging_options, enable_pretty_logging
Expand Down Expand Up @@ -160,6 +161,28 @@ def test_log_file(self):
os.unlink(filename)
os.rmdir(tmpdir)

def test_log_file_with_timed_rotating(self):
tmpdir = tempfile.mkdtemp()
try:
self.options.log_file_prefix = tmpdir + '/test_log'
self.options.log_rotate_mode = 'time'
enable_pretty_logging(options=self.options, logger=self.logger)
self.logger.error('hello')
self.logger.handlers[0].flush()
filenames = glob.glob(tmpdir + '/test_log*')
self.assertEqual(1, len(filenames))
with open(filenames[0]) as f:
self.assertRegexpMatches(
f.read(),
r'^\[E [^]]*\] hello$')
finally:
for handler in self.logger.handlers:
handler.flush()
handler.close()
for filename in glob.glob(tmpdir + '/test_log*'):
os.unlink(filename)
os.rmdir(tmpdir)


class LoggingOptionTest(unittest.TestCase):
"""Test the ability to enable and disable Tornado's logging hooks."""
Expand Down

0 comments on commit 71a540e

Please sign in to comment.