Skip to content

Commit a9aceb9

Browse files
committed
allow configurable log length, fix #28
1 parent e0e1f09 commit a9aceb9

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

arq/worker.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ class BaseWorker(RedisMixin):
7676
# allowing reuse of the worker, eg. ``worker.run()`` can be called multiple times.
7777
reusable = False
7878

79+
#: Adjust the length at which arguments of concurrent functions and job results are curtailed
80+
# when logging job execution
81+
log_curtail = 80
82+
7983
def __init__(self, *,
8084
burst: bool=False,
8185
shadows: list=None,
@@ -342,17 +346,16 @@ def job_callback(self, task):
342346
self.jobs_failed += 1
343347
jobs_logger.debug('task complete, %d jobs done, %d failed', self.jobs_complete, self.jobs_failed)
344348

345-
@classmethod
346-
def log_job_start(cls, started_at: float, j: Job):
349+
def log_job_start(self, started_at: float, j: Job):
347350
if jobs_logger.isEnabledFor(logging.INFO):
348-
jobs_logger.info('%-4s queued%7.3fs → %s', j.queue, started_at - j.queued_at, j)
351+
job_str = j.to_string(self.log_curtail)
352+
jobs_logger.info('%-4s queued%7.3fs → %s', j.queue, started_at - j.queued_at, job_str)
349353

350-
@classmethod
351-
def log_job_result(cls, started_at: float, result, j: Job):
354+
def log_job_result(self, started_at: float, result, j: Job):
352355
if not jobs_logger.isEnabledFor(logging.INFO):
353356
return
354357
job_time = timestamp() - started_at
355-
sr = '' if result is None else ellipsis(repr(result))
358+
sr = '' if result is None else ellipsis(repr(result), self.log_curtail)
356359
jobs_logger.info('%-4s ran in%7.3fs ← %s.%s ● %s', j.queue, job_time, j.class_name, j.func_name, sr)
357360

358361
def handle_prepare_exc(self, msg: str):

tests/test_worker.py

+13
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,19 @@ async def test_long_args(mock_actor_worker, caplog):
3636
"'0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 + 0,1,2,3,4,5,6,7,8,9,10,11,…\n") in log
3737

3838

39+
async def test_longer_args(mock_actor_worker, caplog):
40+
actor, worker = mock_actor_worker
41+
worker.log_curtail = 90
42+
v = ','.join(map(str, range(20)))
43+
await actor.concat(a=v, b=v)
44+
await worker.run()
45+
log = caplog(('0.0\d\ds', '0.0XXs'))
46+
assert ("dft queued 0.0XXs → MockRedisDemoActor.concat"
47+
"(a='0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19', b='0,1,2,3,4,5,6,7,8,9,10,11,12,13…)\n") in log
48+
assert ("dft ran in 0.0XXs ← MockRedisDemoActor.concat ● "
49+
"'0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 + 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,1…\n") in log
50+
51+
3952
async def test_stop_job_normal(mock_actor_worker, caplog):
4053
caplog.set_loggers(fmt='%(name)s %(levelname)s: %(message)s')
4154
actor, worker = mock_actor_worker

0 commit comments

Comments
 (0)