Python - 不同的日志应该在不同的文件中,但出现在同一个文件中
Python - Different logs should be in different files, but appear on the same file
我有一个 Web 应用程序,具有最少的日志记录功能。后端使用 Falcon 在 Apache 上运行(在 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)
我从 2 个不同的 IP(IPx 和 IPy)访问该应用程序 - 因此 'logs' 下应该有 2 个文件夹,文件夹 'IPx' 和文件夹 'IPy',带有每个日志文件..
但是在我访问网络后,我看到了 2 个文件夹,但是只有一个文件夹里面有一个日志文件(比如说 IPx_day.log 在 IPx 文件夹中),但是在查看 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 个不同的文件夹和日志文件
目录。
- 你 运行 来自 IPx 的应用程序,你看到登录 IPx.log 但是
当您从 IPy 运行 应用程序时,IPy 的日志位于 IPx.log.
如果是这样,请你检查一下
- 正确的IP[remote_IP]一直在被传递?
- 打印 IP 和 log_name 并检查您获得的 IP 和日志目录。
我想,需要更改路径。除非你在基本路径[脚本来源]
[我想将此添加为评论,但我没有这样做的名誉。]
我认为这可能与仅配置根记录器的 logging.basicConfig() 有关。我认为您必须使用多个记录器或更好地将多个处理程序附加到一个记录器。
https://docs.python.org/3/library/logging.html#logging.basicConfig
https://docs.python.org/3/library/logging.handlers.html
我有一个 Web 应用程序,具有最少的日志记录功能。后端使用 Falcon 在 Apache 上运行(在 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)
我从 2 个不同的 IP(IPx 和 IPy)访问该应用程序 - 因此 'logs' 下应该有 2 个文件夹,文件夹 'IPx' 和文件夹 'IPy',带有每个日志文件..
但是在我访问网络后,我看到了 2 个文件夹,但是只有一个文件夹里面有一个日志文件(比如说 IPx_day.log 在 IPx 文件夹中),但是在查看 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 个不同的文件夹和日志文件 目录。
- 你 运行 来自 IPx 的应用程序,你看到登录 IPx.log 但是 当您从 IPy 运行 应用程序时,IPy 的日志位于 IPx.log.
如果是这样,请你检查一下
- 正确的IP[remote_IP]一直在被传递?
- 打印 IP 和 log_name 并检查您获得的 IP 和日志目录。
我想,需要更改路径。除非你在基本路径[脚本来源]
[我想将此添加为评论,但我没有这样做的名誉。]
我认为这可能与仅配置根记录器的 logging.basicConfig() 有关。我认为您必须使用多个记录器或更好地将多个处理程序附加到一个记录器。
https://docs.python.org/3/library/logging.html#logging.basicConfig https://docs.python.org/3/library/logging.handlers.html