在数据库中使用Python日志记录模块将日志写入Azure数据记录不起作用

问题描述

我正在尝试将我自己的日志文件写入到数据库中的Python-Notebook中的Azure Datalake Gen 2。我正试图通过使用Python日志记录模块来实现这一点。

不幸的是,我无法让它工作。不会引发错误,也不会创建文件夹,但不会创建包含日志记录内容的文件。即使文件存在,也不会写入任何内容。

本地Python脚本运行正常,但我无法使其在Databricks中运行。

以下是我的代码:

# mount
if not any(mount.mountPoint == '/mnt/log' for mount in dbutils.fs.mounts()):
  dbutils.fs.mount(
    source = "abfss://log@datalake.dfs.core.windows.net/",
    mount_point = "/mnt/log",
    extra_configs = configs)

# vars
folder_log = '/mnt/log/test/2019'
file_log = '201904.log'

# add folder if not existent
dbutils.fs.mkdirs(folder_log)

# setup logging
import logging
logging.basicConfig(
  filename=folder_log+'/'+file_log,
  format='%(asctime)s | %(name)s | %(levelname)s | %(message)s',
  datefmt='%Y-%m-%d %H:%M:%S UTC (%z)',
  level=logging.NOTSET
)

# test
logging.info('Hello World.')

安装似乎还可以。

使用dbutils添加和写入文件工作正常:

dbutils.fs.put(folder_log+'/'+file_log, 'Hello World.')

以这种方式写入文件也很正常:

f = open('/dbfs/mnt/log/test/2019/201904.log', 'w+')
f.write("This is line %d
")
f.close()

我还尝试将"dBFS"添加到路径

filename='/dbfs'+folder_log+'/'+file_log,

有什么想法吗?


解决方案

您可以使用Azure_STORAGE_LOGGING处理程序:

import logging
from azure_storage_logging.handlers import BlobStorageRotatingFileHandler
log = logging.getLogger('service_logger')
azure_blob_handler = BlobStorageRotatingFileHandler(filename, 
                                                    account_name,
                                                    account_key,
                                                    maxBytes,
                                                    container)
log.addHandler(azure_blob_handler)

相关文章