Python 日志记录到 Azure

5

我正在使用Python,想知道是否有任何可直接记录到Azure的包/简单方法?

我找到了一个包(azure-storage-logging),它非常不错,但是它已经不再维护,并且与新的Azure API不兼容。

欢迎提供任何帮助。

3个回答

4

谢谢@Thiago,这真的很有帮助。 - GZZ

1

你可以创建自己的处理程序。我向你展示如何将它记录到 Azure 表中。存储在 Blob 中可能类似。最大的好处是你可以在记录日志时直接发出日志,而不是在进程结束后发送日志。

在 Azure 表存储中创建一个表,然后运行以下代码。

from logging import Logger, getLogger

from azure.core.credentials import AzureSasCredential
from azure.data.tables import TableClient, TableEntity


class _AzureTableHandler(logging.Handler):

    def __init__(self, *args, **kwargs):
        super(_AzureTableHandler, self).__init__(*args, **kwargs)
        credentials: AzureSasCredential = AzureSasCredential(signature=<sas-token>)
        self._table_client: TableClient = TableClient(endpoint=<storage-account-url>, table_name=<table-name>, credential=credentials)

    def emit(self, record):
        level = record.levelname
        message = record.getMessage()
        self._table_client.create_entity(TableEntity({'Severity': level,
                                                      'Message': message,
                                                      'PartitionKey': f'{datetime.now().date()}',
                                                      'RowKey': f'{datetime.now().microsecond}'}))


if __name__ == "__main__":
        logger: Logger = getLogger(__name__)
        logger.addHandler(_AzureTableHandler())
        logger.warning('testing azure logging')

在这种方法中,您还可以为表格创建自定义列的好处。例如,您可以为记录日志的项目名称或运行脚本的开发人员的用户名设置单独的列。
logger.addHandler(_AzureTableHandler(Username="Hesam", Project="Deployment-support-tools-client-portal"))

请确保将自定义列名添加到table_entity字典中。或者您可以将项目名称作为分区键。

Logged in the azure table storage


1
我有同样的要求,需要记录小型应用程序的错误和调试消息,并将日志存储到Azure数据湖中。由于我们的应用程序不是Web应用程序,我们不想使用Azure Insight,我们只需要日志来调试代码。
为了解决这个问题,我创建了temp.log文件。
logging.basicConfig(filename='temp.log', format='%(asctime)s  %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
    datefmt='%Y-%m-%d:%H:%M:%S')    

在程序结束时,我使用以下方式将temp.log上传到Azure:
DataLakeFileClient.append_data 

local_file = open("temp.log",'r')

file_contents = local_file.read()

file_client.append_data(data=file_contents, offset=0, length=len(file_contents))

file_client.flush_data(len(file_contents))

https://learn.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-directory-file-acl-python


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接