New GitHub issue #111054 from Foundsheep:<br>
<hr>
<pre>
# Bug report
### Bug description:
### Sumary
- Using my custom fileHandler subclassing `TimeRotatingFileHandler`, it doesn't rotate a file according to my expectation.
- Expectation : With setting `when` to `midnight`, I expect logs for 2023-10-17 to be stored in `...log.2023-10-17` which will be rotated later
- What happened : However, as shown in the below screenshot, logs for 2023-10-19 are stored in `...log.2023-10-16` or something like that in the past.
![image](https://github.com/python/cpython/assets/92705171/eb915f79-962a-49e7-a002-edd4dfa5353e)
### Code for this logger
```python
import logging
from logging import handlers
import datetime
import pathlib
import socket
class CustomTimedRotatingFileHandler(handlers.TimedRotatingFileHandler):
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.suffix = "%Y%m%d"
def emit(self, record):
if record.levelno in [logging.INFO, logging.WARNING]:
record.msg = str(record.msg)[:255]
# elif record.levelno in [logging.DEBUG, logging.ERROR, logging.CRITICAL]:
# record.msg = str(record.msg)[:65535]
else:
record.msg = str(record.msg)[:65535]
super().emit(record)
def create_logger(name, is_from_client=False):
def get_private_ip():
socket_name = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
private_ip = None
try:
socket_name.connect(("8.8.8.8", 80))
private_ip = socket_name.getsockname()[0]
finally:
socket_name.close()
return private_ip
today_str = datetime.datetime.today().strftime("%Y-%m-%d")
base_dir = pathlib.Path("./logs", "android_server")
if not base_dir.exists():
base_dir.mkdir(parents=True, exist_ok=True)
log = logging.getLogger(name)
file_name = base_dir / "android_server.log"
formatter = logging.Formatter(
f"[%(asctime)s][%(levelname)s]{'' if is_from_client else '[' + str(get_private_ip()) + ']'}{'%(message)s]' if is_from_client else '[%(message)s]'}"
)
custom_trh = CustomTimedRotatingFileHandler(filename=file_name, when="midnight")
custom_trh.setFormatter(formatter)
log.addHandler(custom_trh)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
log.addHandler(console_handler)
log.setLevel(logging.DEBUG)
return log
def get_client_public_ip(request):
ip_address = request.environ.get('HTTP_X_FORWARDED_FOR', request.remote_addr)
return "[" + str(ip_address) + "]" + "["
```
### CPython versions tested on:
3.9
### Operating systems tested on:
Linux
</pre>
<hr>
<a href="https://github.com/python/cpython/issues/111054">View on GitHub</a>
<p>Labels: type-bug</p>
<p>Assignee: </p>