示例#1
0
 async def test_compute_rollover_daily(self):
     current_time = 0
     handler = AsyncTimedRotatingFileHandler(
         self.temp_file.name,
         when=RolloverInterval.MIDNIGHT,
         interval=1,
         backup_count=0,
         utc=True,
     )
     try:
         actual = handler.compute_rollover(current_time)
         self.assertEqual(actual, current_time + ONE_DAY_IN_SECONDS)
     finally:
         await handler.close()
示例#2
0
    async def test_rollover_happens_before_a_logline_is_emitted(self):
        handler = AsyncTimedRotatingFileHandler(
            filename=self.temp_file.name,
            when=RolloverInterval.SECONDS,
            backup_count=1,
        )
        formatter = Formatter("%(asctime)s %(message)s")
        handler.formatter = formatter

        self.assertTrue(os.path.exists(self.temp_file.name))

        await asyncio.sleep(1.1)

        record = make_log_record(msg="testing - initial")
        await handler.emit(record)
        await handler.close()
示例#3
0
    async def test_rollover_deletes_the_next_destination_file_path_if_it_already_exists(
            self):
        with freeze_time("2019-01-20 20:22:49") as frozen_datetime:
            with patch(
                    "aiologger.handlers.files.os.stat",
                    return_value=Mock(
                        st_mtime=frozen_datetime.time_to_freeze.timestamp() -
                        time.altzone),
            ), patch("aiologger.handlers.files.os.unlink") as unlink:
                new_file_path = f"{self.temp_file.name}.2019-01-20_20-22-49"
                os.open(new_file_path, os.O_CREAT)

                self.assertTrue(os.path.exists(new_file_path))
                handler = AsyncTimedRotatingFileHandler(
                    filename=self.temp_file.name,
                    when=RolloverInterval.SECONDS,
                    backup_count=1,
                    utc=True,
                )
                frozen_datetime.tick()
                await handler.emit(self.log_record)

                unlink.assert_called_once_with(new_file_path)

        await handler.close()
示例#4
0
 async def test_files_to_delete_returns_an_empty_list_if_there_is_nothing_to_delete(
         self):
     handler = AsyncTimedRotatingFileHandler(
         filename=self.temp_file.name,
         when=RolloverInterval.SECONDS,
         backup_count=1,
     )
     self.assertEqual(await handler.get_files_to_delete(), [])
示例#5
0
    async def test_compute_rollover_weekly_attime(self):
        current_time = int(time.time())
        today = current_time - current_time % 86400

        at_time = datetime.time(12, 0, 0)

        week_day = time.gmtime(today).tm_wday
        for day, interval in enumerate(RolloverInterval.WEEK_DAYS):
            handler = AsyncTimedRotatingFileHandler(
                filename=self.temp_file.name,
                when=interval,
                interval=1,
                backup_count=0,
                utc=True,
                at_time=at_time,
            )
            try:
                if week_day > day:
                    # The rollover day has already passed this week, so we
                    # go over into next week
                    expected = 7 - week_day + day
                else:
                    expected = day - week_day
                # At this point expected is in days from now, convert to seconds
                expected *= ONE_DAY_IN_SECONDS
                # Add in the rollover time
                expected += 12 * 60 * 60
                # Add in adjustment for today
                expected += today
                actual = handler.compute_rollover(today)
                self.assertEqual(actual,
                                 expected,
                                 msg=f"failed in timezone: {time.timezone}")

                if day == week_day:
                    # goes into following week
                    expected += ONE_WEEK_IN_SECONDS

                actual = handler.compute_rollover(today + 13 * 60 * 60)
                self.assertEqual(actual,
                                 expected,
                                 msg=f"failed in timezone: {time.timezone}")
            finally:
                await handler.close()
示例#6
0
def setup_custom_logger():
    LOG_PATH = 'log'
    FileUtils.create_folder_if_not_exists(LOG_PATH)

    handler = AsyncTimedRotatingFileHandler(
        filename="log/think.log",
        when=RolloverInterval.HOURS,
        backup_count=48,
    )
    formatter = logging.Formatter(
        "[%(asctime)s] %(threadName)s - %(pathname)s %(funcName)s():%(lineno)d  %(levelname)s %(message)s"
    )
    handler.formatter = formatter

    logger = Logger.with_default_handlers(formatter=formatter)
    logger.addHandler(handler)
    logger.setLevel(logging.DEBUG)

    return logger
示例#7
0
    async def test_compute_rollover_daily_attime(self):
        current_time = 0
        at_time = datetime.time(12, 0, 0)
        handler = AsyncTimedRotatingFileHandler(
            self.temp_file.name,
            when=RolloverInterval.MIDNIGHT,
            interval=1,
            backup_count=0,
            utc=True,
            at_time=at_time,
        )
        try:
            actual = handler.compute_rollover(current_time)
            self.assertEqual(actual, current_time + 12 * 60 * 60)

            actual = handler.compute_rollover(current_time + 13 * 60 * 60)
            self.assertEqual(actual, current_time + 36 * 60 * 60)
        finally:
            await handler.close()
示例#8
0
 async def test_initialization_with_hours_rollover_interval(self):
     handler = AsyncTimedRotatingFileHandler(
         filename="/a/random/filepath",
         when=RolloverInterval.HOURS,
         backup_count=1,
     )
     self.assertEqual(handler.interval, ONE_HOUR_IN_SECONDS)
     self.assertEqual(handler.rollover_at,
                      int(time.time()) + ONE_HOUR_IN_SECONDS)
     await handler.close()
示例#9
0
    async def test_delete_files(self):
        handler = AsyncTimedRotatingFileHandler(
            filename=self.temp_file.name,
            when=RolloverInterval.SECONDS,
            backup_count=1,
        )

        file_paths = [NamedTemporaryFile(delete=False).name for _ in range(3)]

        await handler._delete_files(file_paths)

        for file_path in file_paths:
            self.assertFalse(os.path.exists(file_path))
示例#10
0
    async def test_rollover_delete_old_files(self):
        with freeze_time() as frozen_datetime:
            handler = AsyncTimedRotatingFileHandler(
                filename=self.temp_file.name,
                when=RolloverInterval.SECONDS,
                backup_count=1,
            )
            with patch.object(handler, "_delete_files", CoroutineMock()):
                for _ in range(3):
                    await handler.emit(self.log_record)
                    frozen_datetime.tick()
                handler._delete_files.assert_awaited_once()

            await handler.close()
示例#11
0
    async def test_rollover(self):
        handler = AsyncTimedRotatingFileHandler(
            filename=self.temp_file.name,
            when=RolloverInterval.SECONDS,
            backup_count=1,
        )
        formatter = logging.Formatter("%(asctime)s %(message)s")
        handler.formatter = formatter
        r1 = logging.makeLogRecord({"msg": "testing - initial"})
        await handler.emit(r1)
        self.assertTrue(os.path.exists(self.temp_file.name))

        await asyncio.sleep(1.1)

        r2 = logging.makeLogRecord({"msg": "testing - after delay"})
        await handler.emit(r2)
        await handler.close()
        # At this point, we should have a recent rotated file which we
        # can test for the existence of. However, in practice, on some
        # machines which run really slowly, we don't know how far back
        # in time to go to look for the log file. So, we go back a fair
        # bit, and stop as soon as we see a rotated file. In theory this
        # could of course still fail, but the chances are lower.
        found = False
        now = datetime.datetime.now()
        GO_BACK = 5 * 60  # seconds
        for secs in range(GO_BACK):
            prev = now - datetime.timedelta(seconds=secs)
            fn = self.temp_file.name + prev.strftime(".%Y-%m-%d_%H-%M-%S")
            found = os.path.exists(fn)
            if found:
                self.files_to_remove.append(fn)
                break

        self.assertTrue(
            found, msg=f"No rotated files found, went back {GO_BACK} seconds"
        )
示例#12
0
 async def test_invalid_rotation_interval(self):
     for invalid_interval in ("X", "W", "W7", "Xablau"):
         with self.assertRaises(ValueError):
             AsyncTimedRotatingFileHandler(filename=self.temp_file.name,
                                           when=invalid_interval)
示例#13
0
from aiologger.loggers.json import JsonLogger
from aiologger.handlers.files import AsyncTimedRotatingFileHandler
from aiologger.handlers.files import RolloverInterval

__all__ = ['build_sample_middleware']

MODEL_NAME = os.environ.get('model_name', None)
MODEL_VERSION = os.environ.get('model_version', None)
SAMPLE_LOG_BACKUP_COUNT = os.environ.get('model_sample_log_backup_count', 7)

sample_logger = JsonLogger(name='jcake', flatten=True)
api_logger = logging.getLogger("demo.predict")

handler = AsyncTimedRotatingFileHandler(filename="sample/sample",
                                        backup_count=SAMPLE_LOG_BACKUP_COUNT,
                                        when=RolloverInterval.DAYS,
                                        encoding='utf-8')
sample_logger.add_handler(handler)


def build_sample_info(request_ms, request, response, model_name,
                      model_version):
    """
    构造采样的信息.
    该采样实现目前只支持POST类型的请求.

    Args:
     request_ms: 请求耗时(ms)
     request: 请求信息
     response: 响应结果
    """