我需要根据变量的值更改日志记录级别。例如:
if accel >= 10.0:
log_func = logging.critical # Critical for splat event
elif accel >= 2.0:
log_func = logging.warning # Warning for high-G
elif accel >= 1.0:
log_func = logging.info # Info for normal
else:
log_func = logging.debug # Debug otherwise
log_func("Collision with %0.1fG impact.", accel)
Run Code Online (Sandbox Code Playgroud)
我的代码中都有这些实例。有没有更好的办法?
是的,改用该Logger.log()方法,并传入一个级别常量:
import sys
# Map accel values to log levels
levels = (
(10.0, logging.CRITICAL),
(2.0, logging.WARNING),
(1.0, logging.INFO),
(-sys.maxsize, logging.DEBUG)
)
logging.log(next(lev[1] for lev in levels if lev[0] <= accel),
"Collision with %0.1fG impact.", accel)
Run Code Online (Sandbox Code Playgroud)
您可以将级别选择封装到一个实用程序函数中:
def level_for_accel(accel):
# return next matching log level for the given accel value
return next(lev[1] for lev in levels if lev[0] <= accel)
logging.log(level_for_accel(accel), "Collision with %0.1fG impact.", accel)
Run Code Online (Sandbox Code Playgroud)
日志级别都是整数,和CRITICAL,WARNING等的值仅仅是常数。您可以通过多种简单方法将一个值(例如accel)转换为匹配日志级别的方法有多种,其可读性比大量if/ else分支高。
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |