Flask中使用日志库loguru

关于日志记录库loguru的介绍,具体可参见之前的博客:Python日志记录库——loguru

今天来介绍下,如何在Flask中使用loguru日志库。

README.md

This is a simple example of how to use loguru in your flask application
Just create a new InterceptHandler and add it to your app. Different settings should be configured in your config file, so that it is easy to change settings.

这是如何在您的Flask应用程序中使用 loguru 的简单示例
只需创建一个新的 InterceptHandler 并将其添加到您的应用程序中即可。需要在配置文件中配置不同的设置,以便于后续更改应用的设置。

Logging is then as easy as:

from loguru import logger

logger.info("I am logging from loguru!")

app.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from config import config
from loguru import logger
import logging

db = SQLAlchemy()

# create a custom handler
class InterceptHandler(logging.Handler):
    def emit(self, record):
        logger_opt = logger.opt(depth=6, exception=record.exc_info)
        logger_opt.log(record.levelno, record.getMessage())

# application factory pattern 
def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    config[config_name].init_app(app)
    db.init_app(app)
    # logging properties are defined in config.py
    logger.start(app.config['LOGFILE'], level=app.config['LOG_LEVEL'], format="{time} {level} {message}",
                 backtrace=app.config['LOG_BACKTRACE'], rotation='25 MB')
    
    #register loguru as handler
    app.logger.addHandler(InterceptHandler())

    # register Blueprints here
    # ...

    return app

config.py

import os

basedir = os.path.abspath(os.path.dirname(__file__))


class Config(object):
    SECRET_KEY = os.environ.get('SECRET_KEY') or 'SUPER-SECRET'
    LOGFILE = "log.log"

class DevelopmentConfig(Config):
    DEBUG = True
    LOG_BACKTRACE = True
    LOG_LEVEL = 'DEBUG'


class ProductionConfig(Config):
    LOG_BACKTRACE = False
    LOG_LEVEL = 'INFO'


config = {
    'development': DevelopmentConfig,
    'production': ProductionConfig,
    'default': DevelopmentConfig
}

参考资料

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用STM32的HAL来编写Flash操作。下面是一个简单的示例代码,演示了如何使用HAL来进行Flash读写操作: ```c #include "stm32f4xx_hal.h" #define FLASH_USER_START_ADDR ADDR_FLASH_SECTOR_5 // Flash起始地址 #define FLASH_USER_END_ADDR ADDR_FLASH_SECTOR_6 // Flash结束地址 #define FLASH_PAGE_SIZE 0x400 // Flash页大小 void write_flash(uint32_t addr, uint32_t* data, uint32_t size) { FLASH_EraseInitTypeDef erase_init; erase_init.TypeErase = FLASH_TYPEERASE_SECTORS; erase_init.Sector = FLASH_SECTOR_5; erase_init.NbSectors = 1; erase_init.VoltageRange = FLASH_VOLTAGE_RANGE_3; uint32_t page_error = 0; HAL_FLASH_Unlock(); // 解锁Flash // 擦除指定扇区 HAL_FLASHEx_Erase(&erase_init, &page_error); // 写入数据 for (uint32_t i = 0; i < size; i++) { HAL_FLASH_Program(FLASH_TYPEPROGRAM_WORD, addr + i * 4, data[i]); } HAL_FLASH_Lock(); // 锁定Flash } void read_flash(uint32_t addr, uint32_t* data, uint32_t size) { for (uint32_t i = 0; i < size; i++) { data[i] = *(__IO uint32_t*)(addr + i * 4); } } int main(void) { HAL_Init(); // 初始化HAL // 假设要写入的数据为32位整数数组 uint32_t data_to_write[] = {0x12345678, 0x87654321, 0xABCDEF12}; uint32_t data_to_read[3]; // 写入Flash write_flash(FLASH_USER_START_ADDR, data_to_write, sizeof(data_to_write) / sizeof(uint32_t)); // 从Flash读取数据 read_flash(FLASH_USER_START_ADDR, data_to_read, sizeof(data_to_read) / sizeof(uint32_t)); while (1) { // 执行其他操作 } } ``` 在上面的示例代码,`write_flash`函数用于擦除指定Flash扇区并写入数据,而`read_flash`函数用于从Flash读取数据。你可以根据自己的需求修改Flash起始地址、结束地址以及数据大小等参数。 需要注意的是,使用HAL进行Flash操作时,需要先解锁Flash(`HAL_FLASH_Unlock`),操作完成后再锁定Flash(`HAL_FLASH_Lock`)。同时,还需要提供正确的Flash扇区和页大小信息,并确保所操作的地址和数据类型正确。 请注意,以上示例代码仅供参考,实际应用可能需要根据具体情况进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值