You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airflow.apache.org by "hussein-awala (via GitHub)" <gi...@apache.org> on 2023/06/10 17:38:28 UTC

[GitHub] [airflow] hussein-awala opened a new issue, #31834: Redis task handler for logs

hussein-awala opened a new issue, #31834:
URL: https://github.com/apache/airflow/issues/31834

   ### Discussed in https://github.com/apache/airflow/discussions/31832
   
   <div type='discussions-op-text'>
   
   <sup>Originally posted by **michalc** June 10, 2023</sup>
   Should something like the below be in the codebase? It's a simple handler for storing Airflow task logs in Redis, enforcing a max number of entries per try, and an expiry time for the logs
   
   Happy to raise a PR (and I guessed a lot at how things should be... so suspect can be improved upon...)
   
   ```python
   class RedisHandler(logging.Handler):
       def __init__(self, client, key):
           super().__init__()
           self.client = client
           self.key = key
   
       def emit(self, record):
           p = self.client.pipeline()
           p.rpush(self.key, self.format(record))
           p.ltrim(self.key, start=-10000, end=-1)
           p.expire(self.key, time=60 * 60 * 24 * 28)
           p.execute()
   
   
   class RedisTaskHandler(FileTaskHandler, LoggingMixin):
       """
       RedisTaskHandler is a python log handler that handles and reads
       task instance logs. It extends airflow FileTaskHandler and
       uploads to and reads from Redis.
       """
   
       trigger_should_wrap = True
   
       def __init__(self, base_log_folder: str, redis_url):
           super().__init__(base_log_folder)
           self.handler = None
           self.client = redis.Redis.from_url(redis_url)
   
       def _read(
           self,
           ti,
           try_number,
           metadata=None,
       ):
           log_str = b"\n".join(
               self.client.lrange(self._render_filename(ti, try_number), start=0, end=-1)
           ).decode("utf-8")
           return log_str, {"end_of_log": True}
   
       def set_context(self, ti):
           super().set_context(ti)
           self.handler = RedisHandler(
               self.client, self._render_filename(ti, ti.try_number)
           )
           self.handler.setFormatter(self.formatter)
   ```</div>


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] eladkal closed issue #31834: Redis task handler for logs

Posted by "eladkal (via GitHub)" <gi...@apache.org>.
eladkal closed issue #31834: Redis task handler for logs
URL: https://github.com/apache/airflow/issues/31834


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [airflow] hussein-awala commented on issue #31834: Redis task handler for logs

Posted by "hussein-awala (via GitHub)" <gi...@apache.org>.
hussein-awala commented on issue #31834:
URL: https://github.com/apache/airflow/issues/31834#issuecomment-1585749004

   @michalc I created this issue for the discussed feature


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@airflow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org