在从python-telegram-bot轮询数据时无法记录到执行无限循环的文件



我不是程序员,而是一个非常热心的用户:)我已经实现了一个日志与influxdb, grafana和连接到modbus接口通过tcp/ip与python。一切都很好,但我有一个大问题,我不能有活动的日志,也许是我用过的坏结构。基本上我应该有机器人听,和另一个无限线程谁从逆变器拉数据。下面是我所使用的结构的精简版本:

def start(update: Updater, context: CallbackContext):
update.message.reply_text('Whatever command/action/function i want')
def anothercommand(update: Updater, context: CallbackContext):
update.message.reply_text('Whatever command/action/function i want')
def loop(update: Updater, context: CallbackContext):
print('Starting thread for automations')
def thread1(update: Updater, context: CallbackContext):
while 1:
#loop to collect data into dB and send automated TG Alerts
update.message.reply_text('I am from thread 1. going to sleep now.')
time.sleep(2)
t1 = threading.Thread(target=thread1,args=(update,context))
t1.start()
def main() -> None:
print('bot started..')
updater = Updater(TOKEN,use_context=True)
dispatcher = updater.dispatcher
loop(updater,CallbackContext)
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CommandHandler('anothercommand', anothercommand))
updater.start_polling()
updater.idle()

if __name__ == '__main__':
main()

…强制记录到一个文件:

sys.stdout = open('/the/path/to/your/file', 'w')

file.py > output.txt

import logging
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)

生成一个空日志文件,并且在控制台上什么也不显示。我该怎么算?

从您的代码来看,它不像是您写入日志。

如果使用"import logging",则需要像这样写入日志:

logging.warning("What you need to log") # this will be level warning in the log
logging.debug("What you need to log") # this will be level debug in the log
logging.error("What you need to log") # this will be level error in the log
... #other logging levels

在basicConfig中设置要在example.log文件

中查看的日志级别您可以在这里看到日志级别:https://docs.python.org/3/library/logging.html#logging-levels

与日志:

import logging

def start(update: Updater, context: CallbackContext):
logging.debug("Start")
update.message.reply_text('Whatever command/action/function i want')

def anothercommand(update: Updater, context: CallbackContext):
logging.debug("Another command")
update.message.reply_text('Whatever command/action/function i want')
def loop(update: Updater, context: CallbackContext):
print('Starting thread for automations')
logging.debug("Starting thread for automations")
def thread1(update: Updater, context: CallbackContext):
while 1:
#loop to collect data into dB and send automated TG Alerts
update.message.reply_text('I am from thread 1. going to sleep now.')
time.sleep(2)
t1 = threading.Thread(target=thread1,args=(update,context))
t1.start()
def main() -> None:
print('bot started..')
logging.debug("Bot started..")
updater = Updater(TOKEN,use_context=True)
dispatcher = updater.dispatcher
loop(updater,CallbackContext)
dispatcher.add_handler(CommandHandler('start', start))
dispatcher.add_handler(CommandHandler('anothercommand', anothercommand))
updater.start_polling()
updater.idle()

if __name__ == '__main__':
logging.basicConfig(filename='example.log', encoding='utf-8', level=logging.DEBUG)
main()

我已经部分解决了…

显然我之前插入了用于日志记录的代码,但我简化了代码,以征求您的意见。现在我正在登录到一个文件(并查看控制台的日志),但它不能捕获所有异常…

使用一个函数(如"anothercommand"),谁调用第二个(gpio setup for automation),我有一个错误记录到控制台,但没有在文件中(与已经分配的gpio引脚上的OUT分配有关)。

这是我正在运行的代码,在之外def:

# create logger
logger = logging.getLogger()
logger.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s | %(levelname)s | %(message)s')
stdout_handler = logging.StreamHandler(sys.stdout)
stdout_handler.setLevel(logging.DEBUG)
stdout_handler.setFormatter(formatter)
file_handler = logging.FileHandler('logs.log')
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
logger.addHandler(stdout_handler) 

最新更新