-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlogger.py
More file actions
191 lines (152 loc) · 6.32 KB
/
logger.py
File metadata and controls
191 lines (152 loc) · 6.32 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
from prefect import flow, task, get_run_logger
from prefect.events import emit_event
import logging
@task(log_prints=True)
def debug_task():
"""Task that logs at DEBUG level and emits an event"""
logger = get_run_logger()
logger.debug("Chainsaw blade sharpness: optimal. Hydraulic pressure: 3,200 PSI. Ready to process old growth.")
emit_event(
event="equipment.chainsaw.initialized",
resource={"prefect.resource.id": "logging-system-debug"}
)
return "debug_complete"
@task(log_prints=True)
def info_task():
"""Task that logs at INFO level and emits an event"""
logger = get_run_logger()
logger.info("\033[36mSector 12-B cleared: 847 trees felled. Estimated age of oldest: 340 years. It never saw it coming.\033[0m")
emit_event(
event="forest.sector.cleared",
resource={"prefect.resource.id": "logging-system-info"}
)
return "info_complete"
@task(log_prints=True)
def warning_task():
"""Task that logs at WARNING level and emits an event"""
logger = get_run_logger()
logger.warning("Warning: Spotted owl nest detected in quadrant 7. Removal scheduled before dawn operations.")
emit_event(
event="wildlife.obstacle.detected",
resource={"prefect.resource.id": "logging-system-warning"}
)
return "warning_complete"
@task(log_prints=True)
def error_task():
"""Task that logs at ERROR level and emits an event"""
logger = get_run_logger()
logger.error("\033[31mError: Tree protestor chained to 400-year-old redwood. Bolt cutters dispatched. Quota must be met.\033[0m")
emit_event(
event="operation.protest.encountered",
resource={"prefect.resource.id": "logging-system-error"}
)
return "error_complete"
@task(log_prints=True)
def critical_task():
"""Task that logs at CRITICAL level and emits an event"""
logger = get_run_logger()
logger.critical("CRITICAL: Last remaining old growth stand identified. Board of Directors has approved clear-cutting. Tomorrow we finish what we started.")
emit_event(
event="forest.final.stand.targeted",
resource={"prefect.resource.id": "logging-system-critical"}
)
return "critical_complete"
@flow(log_prints=True)
def subflow_logger_flow():
"""Subflow that demonstrates all logging levels"""
logger = get_run_logger()
# Log at all levels in subflow body
logger.debug("Secondary harvesting team deployed. GPS coordinates locked on untouched watershed area.")
logger.info("\033[32mSubflow timber quota verification: 94% of monthly target achieved. Remaining stands identified.\033[0m")
logger.warning("Subflow warning: Soil erosion detected in previously cleared sector. Landslide risk elevated.")
logger.error("Subflow error: Environmental inspector approaching perimeter. Operations temporarily suspended.")
logger.critical("\033[1m\033[33mSubflow critical: Satellite imagery shows our operations. Media blackout required.\033[0m")
# Execute all logging tasks
debug_task()
info_task()
warning_task()
error_task()
critical_task()
return "subflow_complete"
@flow(log_prints=True)
def logger_flow():
"""Main flow that demonstrates comprehensive logging capabilities
## Flow purpose
This flow tests all Prefect logging levels and custom event emission.
Each task represents a different log level, and the flow emits multiple custom events.
## Flow code
```python
from prefect import flow, task, get_run_logger
from prefect.events import emit_event
@task(log_prints=True)
def debug_task():
logger = get_run_logger()
logger.debug("Debug level logging")
emit_event(event="custom.debug.event", resource={"prefect.resource.id": "logger"})
return "debug_complete"
# ... similar tasks for info, warning, error, critical ...
@flow(log_prints=True)
def logger_flow():
logger = get_run_logger()
# Log at all levels
logger.debug("Flow debug message")
logger.info("Flow info message")
logger.warning("Flow warning message")
logger.error("Flow error message")
logger.critical("Flow critical message")
# Emit custom events
for i in range(5):
emit_event(event=f"custom.flow.event.{i}", resource={"prefect.resource.id": "logger-flow"})
# Execute tasks
debug_task()
info_task()
warning_task()
error_task()
critical_task()
# Call subflow
subflow_logger_flow()
```
"""
logger = get_run_logger()
print("=== TimberCorp Industries - Daily Logging Operations ===")
# Log at all levels in main flow body
logger.debug("Harvesting equipment initialized. Satellite maps loaded. Ancient forest coordinates acquired.")
logger.info("Morning shift report: 12 crews active. Weather optimal for felling. No witnesses in sight.")
logger.warning("\033[33mWarning: Tree ring analysis shows specimens over 500 years old. Increase processing speed.\033[0m")
logger.error("Error: Automated stump grinder jammed on redwood root system. Delaying evidence removal by 2 hours.")
logger.critical("\033[1m\033[31mCRITICAL: Drone footage leaked. Last pristine valley now viral. Accelerate operations before injunction.\033[0m")
# Emit 5 custom events from main flow body
emit_event(
event="daily.harvest.cycle.started",
resource={"prefect.resource.id": "timbercorp-operations"}
)
emit_event(
event="forest.biomass.calculated",
resource={"prefect.resource.id": "timbercorp-operations"}
)
emit_event(
event="profit.margins.optimized",
resource={"prefect.resource.id": "timbercorp-operations"}
)
emit_event(
event="wildlife.displacement.logged",
resource={"prefect.resource.id": "timbercorp-operations"}
)
emit_event(
event="erosion.risk.accepted",
resource={"prefect.resource.id": "timbercorp-operations"}
)
print("\033[34mCommencing multi-level logging diagnostics across all operational zones...\033[0m")
# Execute all logging tasks
debug_task()
info_task()
warning_task()
error_task()
critical_task()
print("Initiating secondary harvest operations...")
# Call the subflow
subflow_logger_flow()
logger.info("Daily logging cycle complete. Forest is quieter now. Tomorrow we move deeper.")
return "logging_complete"
if __name__ == '__main__':
logger_flow.serve(name='timber-logger')