我有一个Python Flask应用程序。当我从PowerShell运行它时,我可以在整个代码中看到输出流来自对print()
和logging.info()
等函数的调用。
当我将IIS指向我的应用并让它通过带有 web.config 文件的FastCGI运行时,该输出流在哪里?如何将其捕获到日志文件中?
答案 0 :(得分:2)
使用FastCGI / WSGI时有3种日志文件。
让他们命名:
app.logger.LEVEL("...")
中记录了您想要记录的所有内容"[2019-01-12 21:08:00,748] INFO in _internal: 127.0.0.1 - - [12/Jan/2019 21:08:00] "GET /static/js/jquery-3.3.1.min.js HTTP/1.1" 304 -
2019-01-12 20:42:41 10.175.214.88 GET /static/js/jquery-ui.min.js 80 ****USER**** ****IP**** Mozilla/5.0+(Windows+NT+10.0;+WOW64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/70.0.3538.110+Safari/537.36 http://yourweb.com/smthing 304 0 0 1875
请参见以下示例:
from flask import Flask
from logging.config import dictConfig
dictConfig({
'version': 1,
'formatters': {'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}},
'handlers': {
'wsgi': {
'class': 'logging.StreamHandler',
'formatter': 'default'
},
'custom_handler': {
'class': 'logging.FileHandler',
'formatter': 'default',
'filename': r'C:\inetpub\wwwroot\myapp\logs\myapp.log'
}
},
'root': {
'level': 'INFO',
'handlers': ['wsgi', 'custom_handler']
}
})
app = Flask(__name__)
# other imports using logger should go here
# from a import b
# ...
和web.config文件:
<configuration>
<system.webServer>
<handlers>
<remove name="Python FastCGI" />
<add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="E:\Python362_64\python.exe|E:\Python362_64\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<urlCompression doStaticCompression="true" doDynamicCompression="true" />
</system.webServer>
<appSettings>
<!-- Required settings -->
<add key="WSGI_HANDLER" value="myapp.app" />
<add key="PYTHONPATH" value="C:\inetpub\wwwroot\myapp" />
<add key="SCRIPT_NAME" value="/myapp" />
<add key="WSGI_LOG" value="C:\inetpub\wwwroot\myapp\logs\wsgi_myapp.log" />
<add key="WSGI_RESTART_FILE_REGEX" value=".*((\.py)|(\.config))$" />
</appSettings>
</configuration>