记录器在没有格式的情况下写下关于每一行的新问题,只有消息。
我的代码:
import logging
from logging.handlers import RotatingFileHandler
# Set up logging
LOG_FILE = argv[0][:-3] + '.log'
logging.basicConfig(
filename=LOG_FILE,
filemode='a',
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
handler = RotatingFileHandler(LOG_FILE,maxBytes=1000000)
logger.addHandler(handler)
def main():
target, command, notify_address, wait = get_args(argv)
logger.info('Checking status of %s every %d minutes.' % (target, wait))
logger.info('Running %s and sending output to %s when online.' % (command, notify_address))
从get_args()返回的变量都是字符串,即使wait是一个数字。
请注意,我在IDE或运行时没有收到任何错误。
我在日志文件中输出的输出:
2015-02-12 16:26:27,483 - INFO - Checking status of <ip address> every 30 minutes.
Running <arbitrary bash command string> and sending output to <my email address> when online.
2015-02-12 16:26:27,483 - INFO - Running <arbitrary bash command string> and sending output to <my email address> when online.
是什么导致第二个logger.info()打印两次,并且只能正确格式化一次?
我有另一个完美记录的脚本,不知道我在这里做了什么。 (复制/粘贴日志设置部分是安全的)
答案 0 :(得分:1)
您是否在代码的不同级别使用记录器?听起来好像日志消息可能向上传播。尝试添加
logger.propagate = False
添加处理程序后。您可以查看python文档以获取更详细的解释here,但下面的相关文字听起来与您所看到的完全相同。
注意如果将处理程序附加到记录器及其一个或多个祖先,它可能会多次发出相同的记录。通常,您不需要将处理程序附加到多个记录器 - 如果您只是将其附加到记录器层次结构中最高的相应记录器,那么它将看到所有后代记录器记录的所有事件,前提是它们的传播设置左侧设置为True。一种常见的情况是仅将处理程序附加到根记录器,并让传播处理其余部分。