jack
11/11/2021, 5:26 PMFlowRunViewjack
11/11/2021, 5:27 PMfrom time import sleep
from prefect import Flow, task
from prefect.run_configs import LocalRun
import prefect
@task
def do_something():
    for i in range(1000):
        <http://prefect.context.logger.info|prefect.context.logger.info>(f"Logging {i}")
        sleep(2)
FLOW_NAME = "simple example"
with Flow(FLOW_NAME, run_config=LocalRun()) as flow:
    do_something()
flow.register("Prefect_Tutorials")Kevin Kho
jack
11/11/2021, 5:29 PMwhile True:
    output = []
    flow_run = FlowRunView.from_flow_run_id(flow_run_id)
    for log in flow_run.get_latest().get_logs():
        output.append(log.message)
    print("\n  ".join(output))
    time.sleep(1)jack
11/11/2021, 5:31 PMBeginning Flow run for 'simple example'
11/11/2021 05:30:36 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:38 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:39 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:41 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:42 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:44 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:45 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:47 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'
11/11/2021 05:30:48 PM Submitted for execution: PID: 34084
  Beginning Flow run for 'simple example'Kevin Kho
Zanie
watch_flow_runstream_flow_run_logsdef stream_flow_run_logs(flow_run_id: str) -> None:
    """
    Basic wrapper for `watch_flow_run` to print the logs of the run
    EXPERIMENTAL: This interface is experimental and subject to change
    """
    for log in watch_flow_run(flow_run_id):
        level_name = logging.getLevelName(log.level)
        timestamp = log.timestamp.in_tz(tz="local")
        # Uses `print` instead of the logger to prevent duplicate timestamps
        print(
            f"{timestamp:%H:%M:%S} | {level_name:<7} | {log.message}",
        )Zanie
get_logsjack
11/11/2021, 5:35 PMjack
11/11/2021, 5:36 PMZanie
Zanie
logs_query = {
            with_args(
                "logs",
                {
                    "order_by": {EnumValue("timestamp"): EnumValue("asc")},
                    "where": {
                        "_and": [
                            {"timestamp": {"_lte": self.updated_at.isoformat()}},
                            (
                                {"timestamp": {"_gt": start_time.isoformat()}}
                                if start_time
                                else {}
                            ),
                        ]
                    },
                },
            ): {"timestamp": True, "message": True, "level": True}
        }jack
11/11/2021, 5:38 PMjack
11/11/2021, 5:39 PMZanie
updated_atZanie
updated_atjack
11/11/2021, 5:43 PMZanie
jack
11/11/2021, 5:50 PMjack
11/11/2021, 6:14 PMZanie
