cjb*_*jbs 6 python logging flask
我有一个python应用程序,其中的主要类是Flask应用程序,当我收到HTTP请求时,我会从其他类中启动方法。我想共享记录器,显然它应该很简单,但是我无法使其正常工作。
这是我为主类的代码:
#!flask/bin/python
from flask import Flask, jsonify, abort, make_response, request
from SGRuntime import SGRuntime
import logging
from logging.handlers import TimedRotatingFileHandler
app = Flask(__name__)
sgRuntime = SGRuntime()
@app.route('/sg/api/v2.0/init', methods=['GET'])
def init_service():
app.logger.info('Request: Init service')
return sgRuntime.start()
@app.route('/sg/api/v2.0/stop', methods=['GET'])
def stop_service():
app.logger.info('Request: Stop service')
return sgRuntime.stop()
@app.route('/sg/api/v2.0/restart', methods=['GET'])
def restart_service():
app.logger.info('Request: Restart service')
return sgRuntime.restart()
@app.route('/sg/api/v2.0/alive', methods=['GET'])
def alive():
if sgRuntime.running == True:
return sgRuntime.get_stat()
else:
return "Service not running"
@app.errorhandler(404)
def not_found(error):
return make_response(jsonify({'error': 'Not found'}), 404)
if __name__ == '__main__':
handler = TimedRotatingFileHandler('./SGLog.log', when='midnight', interval=1)
handler.setLevel(logging.DEBUG)
fileFormatter = logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')
handler.setFormatter(fileFormatter)
app.logger.addHandler(handler)
app.run(debug=True)
Run Code Online (Sandbox Code Playgroud)
我想使用同一记录器的SGRuntime.py的代码:
import serial
import logging
class SGRuntime():
CONFIG_FILE_PATH = "config.cfg"
running = False
configuration = {
'port' : 'COM5',
'baudrate' : '9600',
'debug' : '0',
'serverip' : '127.0.0.1',
'serverport' : 8080
}
protocol = None
startedSince = None
def __init__(self):
self.running = False
def start(self):
if self.running:
return 'ERROR: ALREADY RUNNING'
self.logger = logging.getLogger()
self.logger.info('SGRuntime started')
Run Code Online (Sandbox Code Playgroud)
记录器的输出为:
2016-01-21 16:20:28,137 INFO Request: Init service
Run Code Online (Sandbox Code Playgroud)
因此,我缺少了SGRuntime类的日志记录。你能帮助我吗?
非常感谢您!
logging.getLogger()
返回 logger 的相同实例(针对 logger name )来测试它,您可以进行:
name = "myname"
logger = logging.getLogger(name)
for _ in range(100):
assert logger is logging.getLogger(name)
Run Code Online (Sandbox Code Playgroud)
因此要有相同的记录器实例。创建一个名为“mylogger”的模块,并将在此模块中创建的记录器实例导入到需要记录器的任何位置。
归档时间: |
|
查看次数: |
2511 次 |
最近记录: |