Python - 不同的日志应该在不同的文件中,但出现在同一个文件中

时间:2017-07-18 09:03:16

标签: python apache logging falconframework

我有一个Web应用程序,具有最小的日志记录功能。后端使用Falcon在Python上运行(在Python上)。

每个请求都有以下代码

msg = 'user: {usr} running {req} {req_uri:<30} | from: {loc_ip}:{loc_port} '.format(
        usr=req.env['REMOTE_USER'],
        req=req.env['REQUEST_METHOD'],
        loc_ip=req.env['REMOTE_ADDR'],
        loc_port=req.env['REMOTE_PORT'],
        req_uri=req.env['REQUEST_URI'])

    log_name = 'logs/{remote_ip}/{remote_ip}_{day}.log'.format(remote_ip=req.env['REMOTE_ADDR'], day=datetime.datetime.now().date().strftime('%d_%m_%Y'))
    os.makedirs(os.path.dirname(log_name), exist_ok=True)
    logging.basicConfig(filename=log_name, level=logging.DEBUG, format='[%(asctime)s] - %(levelname)s - [%(module)s:%(lineno)d] %(message)s', datefmt='%d/%m/%Y %H:%M:%S')
    logging.info(msg)

我从两个不同的IP(IPx和IPy)访问该应用程序 - 因此在&#39; logs&#39;,文件夹&#39; IPx&#39;下面应该有2个文件夹。和文件夹&#39; IPy&#39;,每个都有一个日志文件。

但是在我访问网络后,我看到了2个文件夹,但只有一个文件夹里面有一个日志文件(比如IPx文件夹中的IPx_day.log),但在查看IPx_day.log文件之后我看到:

[TIME] - INFO - [FILE] user: user1 running GET /domain | from: IPy:PORTy
// Other log statments..
[TIME] - INFO - [FILE] user: user2 running GET /domain | from: IPx:PORTx

这两行都在文件文件中 - IPx_day.log

有谁知道为什么两行都出现在同一个文件中?

感谢。

2 个答案:

答案 0 :(得分:1)

从你的写作中,我所理解的是

  1. 您正在分别创建2个不同的文件夹和日志文件 目录。
  2. 您从IPx运行应用程序,然后在IPx.log中看到日志     当您从IPy运行应用程序时,IPy的日志位于IPx.log。
  3. 如果这是对的,请你检查是否

    1. 正在传递右IP [remote_IP]吗?
    2. 打印IP和log_name并检查您获得的IP和日志目录。
    3. 我认为,需要改变路径。除非你在基本路径[脚本的来源]

答案 1 :(得分:1)

[我会将此作为评论添加,但我没有这样的声誉。]

我认为它可能与logging.basicConfig()有关,它只配置根记录器。我认为您必须使用多个记录器或更好地将多个处理程序附加到一个记录器。

https://docs.python.org/3/library/logging.html#logging.basicConfig https://docs.python.org/3/library/logging.handlers.html