Python开源日志库Loguru
日志打印比print()
方式更容易debug。
安装命令:pip install loguru
loguru中最重要的就是add()
函数:此函数应用于注册接收器,接收器负责管理使用记录字典上下文化的日志消息。接收器可以采用多种形式:简单函数、字符串路径、类似文件的对象、协程函数或内置处理程序。请注意,您还可以remove()
使用添加时返回的标识符来添加以前添加的处理程序。如果要取代默认stderr
处理程序,这将特别有用:只需调用 logger.remove()
即可重新开始。
pythonfrom loguru import logger
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
类似于f-string的语法,格式化输出日志,但是个人感觉系统默认的就挺好看的了。
pythonimport sys
from loguru import logger
logger.remove() #清空之前设定的logger
logger.add(
sys.stdout,
level="INFO",
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message}!",
)
logger.error("This is an error message")
在loguru中使用add方法中指明输出到的文件名即可达到目的,本例中是输出到info.log
pythonfrom loguru import logger
logger.add(
'info.log',
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {module}:{function}:{line} - {message}",
level="INFO",
)
def main():
logger.debug("This is a debug message")
logger.info("This is an info message")
logger.warning("This is a warning message")
logger.error("This is an error message")
if __name__ == "__main__":
main()
loguru
中也支持自动计时创建文件。
pythonlogger.add("file_{time}.log")
日志轮换指通过定期创建新的日志文件并归档或删除旧的日志来防止日志变得过大
pythonlogger.add("file_1.log", rotation="500 MB") # Automatically rotate too big file
logger.add("file_2.log", rotation="12:00") # New file is created each day at noon
logger.add("file_3.log", rotation="1 week") # Once the file is too old, it's rotated
logger.add("file_X.log", retention="10 days") # Cleanup after some time
logger.add("file_Y.log", compression="zip") # Save some loved space
日志筛选指根据特定条件有选择的控制应输出与保存哪些日志信息 在loguru中,可以简单地使用lambda函数来过滤日志
pythonfrom loguru import logger
# logger.remove()
logger.add("test.log", filter=lambda x: "Cai Xukong" in x["message"], level="INFO")
def main():
logger.info("Hello Cai Xukong")
logger.info("Bye Cai Xukong")
logger.info("撒撒")
if __name__ == "__main__":
main()
在loguru
中,通过显示包含变量值的完整堆栈跟踪来方便用户识别。
pythonfrom loguru import logger
def division(a, b):
return a / b
def nested(c):
try:
division(1, c)
except ZeroDivisionError:
logger.exception("ZeroDivisionError")
if __name__ == "__main__":
nested(0)
可以使用
catch()
装饰器/上下文管理器来解决,它确保任何错误都正确地传播到 logger
。
pythonfrom loguru import logger
def division(a, b):
return a / b
@logger.catch
def nested(c):
division(1, c)
if __name__ == "__main__":
nested(0)
本文作者:Geaming
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!