我正在使用Python,想知道是否有任何可直接记录到Azure的包/简单方法?
我找到了一个包(azure-storage-logging),它非常不错,但是它已经不再维护,并且与新的Azure API不兼容。
欢迎提供任何帮助。
我正在使用Python,想知道是否有任何可直接记录到Azure的包/简单方法?
我找到了一个包(azure-storage-logging),它非常不错,但是它已经不再维护,并且与新的Azure API不兼容。
欢迎提供任何帮助。
你应该使用Application Insights,它会将日志发送到Azure Monitor(之前称为Log Analytics)。
https://learn.microsoft.com/en-us/azure/azure-monitor/app/opencensus-python
你可以创建自己的处理程序。我向你展示如何将它记录到 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字典中。或者您可以将项目名称作为分区键。
logging.basicConfig(filename='temp.log', format='%(asctime)s %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%Y-%m-%d:%H:%M:%S')
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