我正在尝试将信息记录到代码的模块级别的应用程序洞察中,而不是记录到函数级别。
当记录器从函数内调用(在我的项目的任何模块中)时,我可以成功地记录信息、警告等,但当在函数外调用时(例如初始化一个模块,希望记录一些设置),我可以成功地记录信息、警告等
例如,当在azure functions中运行我的HttpTrigger应用程序时,这会起作用,并将信息记录到app Insights:
import logging
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('this message is logged successfully')
do_something()
虽然这不起作用:
import logging
logging.info('this message isnt logged anywhere')
def main(req: func.HttpRequest) -> func.HttpResponse:
do_something()
我试过使用命名记录器,更改日志设置,例如:
import logging
log = logging.getLogger(__name__)
log.setLevel(logging.INFO)
log.info('This still isnt logged')
def main(req: func.HttpRequest) -> func.HttpResponse:
do_something()
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[1.*, 2.0.0)"
},
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"default": "Information",
"Host.Results": "Information",
"Function": "Information",
"Host.Aggregator": "Information"
}
}
}
在本地运行代码时,信息会在任何地方正确地打印到stdout。
我想我一定是完全误解了日志记录是如何在AZ工作的。如果有人能填补我的空白,在这里,为什么日志没有工作,如我所期望的,这将是感激的!
这就是原因:
问题来自于Azure上的应用程序日志默认不打开。这就是解决办法:
转到Platform features->所有设置。
import logging
import azure.functions as func
logger = logging.getLogger('name')
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
sh.setLevel(logging.INFO)
logger.addHandler(sh)
logger.info('This will work.')
def main(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.params.get('name')
if not name:
try:
req_body = req.get_json()
except ValueError:
pass
else:
name = req_body.get('name')
if name:
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
https://docs.microsoft.com/en-us/azure/app-service/troubleshoot-diagnosty-logs#enable-application-logging-linuxcontainer
我试图创建一个用BlobTrigger触发的Azure函数。当我向目标容器添加新文件时,我可以通过查看调用来看到函数的运行,在Azure portal上的Monitor中显示触发时间和状态“Success”。然而,除了“已连接!”之外,日志中没有出现任何内容欢迎文本。 这是样板运行。我尝试过的csx有点修改,也有点修改: 和 function.json(我已向其添加了具有相同路径的输入绑定): 我
我可以创建一个命名的子记录器,以便该记录器输出的所有日志都用它的名称标记。我可以只在函数/类/任何东西中使用记录器。 但是,如果该代码调用了另一个模块中的函数,该模块仅使用日志模块函数(根记录器的代理)进行日志记录,我如何确保这些日志消息通过相同的记录器(或者至少以相同的方式记录)? 例如: main.py 其他.py 产出: 我希望能够使两个日志行都标记为名称'stuff',我希望能够做到这一点
问题内容: 我想知道如何实现一个全局记录器,该记录器可以用自己的设置在任何地方使用: 我目前有一个自定义记录器类: 该类在一个单独的文件中,其中包含一些格式化程序和其他内容。记录器可以完美地独立运行。 我将此模块导入我的主python文件中,并创建一个像这样的对象: 但显然,我无法从代码的其他部分访问此对象。我使用错误的方法吗?有一个更好的方法吗? 问题答案: 使用创建一个名为全球记录。 main
我正在使用Python日志模块,并希望禁用由我导入的第三方模块打印的日志消息。例如,我使用的是如下所示: 当我执行logger.debug时,它会输出我的调试消息(“my Message!”),但它也会从我导入的任何模块中输出调试消息(如请求和许多其他东西)。 我只想看到我感兴趣的模块的日志消息。有没有可能让日志模块做到这一点?
我有一个小的python项目,它有如下结构-- 我计划使用默认日志模块将消息打印到stdout和一个日志文件。要使用日志模块,需要进行一些初始化- 目前,我在开始记录消息之前在每个模块中执行此初始化。是否有可能在一个地方只执行一次初始化,以便通过在整个项目中进行日志记录来重用相同的设置?
有没有一种方法可以在不更新host.json文件的情况下覆盖Azure函数应用程序的默认日志级别?我希望我的函数只在dev环境中将跟踪日志传递给应用程序洞察。我在想,如果一个环境变量可以设置,函数将知道什么时候传递日志。