使用BlobStorageRotatingFileHandler时缺少日志和日志延迟

时间:2018-11-20 08:06:07

标签: python azure logging flask azure-storage

我在Azure上托管了Flask API,并且我正在使用azure_storage_logging.handlers包将API运行时日志发送到Azure存储。我正在使用BlobStorageRotatingFileHandler。 我的存储帐户中收到很少的日志。但是,大量日志丢失了。我的API占用大量CPU。 请让我知道如何解决此问题。

def fun_logging(id, logfilename , loggername):
    mystorageaccountname = STORAGE_ACCOUNT_NAME
    mystorageaccountkey = STORAGE_ACCOUNT_KEY
    mystoragecontainer = STORAGE_CONTAINER
    utctime = asctime(gmtime())    
    logger = logging.getLogger(loggername)
    logger.setLevel(logging.DEBUG)

    log_formater = logging.Formatter('%(utctime)s - %(id)s  - %(levelname)s - %(message)s')
    azure_blob_handler = BlobStorageRotatingFileHandler(filename = logfilename, account_name=mystorageaccountname,account_key=mystorageaccountkey, delay=False, maxBytes= 10000,container=mystoragecontainer)
    azure_blob_handler.setLevel(logging.DEBUG)
    azure_blob_handler.setFormatter(log_formater)
    if (logger.hasHandlers()):
        logger.handlers.clear()
    logger.addHandler(azure_blob_handler)
    logger = logging.LoggerAdapter(logger, {'id': id, 'utctime':utctime})
    return logger

####### Calling function
logger = fun_logging(id, 'Logs//xyz.log', 'xyz')
logger.info(Result.log) ## the variable I am logging

1 个答案:

答案 0 :(得分:0)

我搜索了您使用的BlobStorageRotatingFileHandler,并找到了github存储库michiya/azure-storage-logging。我不确定您的烧瓶项目中是否使用过它。如果是,我建议您使用TableStorageHandler登录场景以编写大量日志,而不要使用BlobStorageRotatingFileHandler

查看完此仓库的代码后,出现了一个问题,即使用BlockBlob一次存储整个日志文件,而不是将日志记录追加到AppendBlob中。因此,它不适合具有大量日志的情况。 Azure建议使用AppendBlob进行日志记录,如果使用Blob存储,请参见以下here

  

附加blob用于记录日志,例如当您要写入   文件,然后继续添加更多信息。大多数对象存储在   Blob存储是块Blob。

因此,您可以尝试通过Azure Blob Storage SDK for Python使用Append Blob来自行包装日志记录API。否则,Azure表存储是一个不错的选择,您可以尝试进行日志记录。对于大量日志记录,最佳实践是将日志写入EventHub,然后使用流分析等其他服务来过滤数据并将数据传输到Blob存储中。

希望有帮助。