Как создать логи в Python?

У меня есть функция, которая записывает информацию в файл: 

```python
async def add_user_log_list(user_name, bad_word, text, userID_sender, time):
    user_log = open('logs/user_log.txt', 'r+', encoding="utf8")
    user_log.write('[' + str(time) + ']' + " @" + user_name + "("+ str(userID_sender) +")" + " использовал запрещеное слово <" + str(bad_word) + "> в своем сообщении: " + str(text) + "\n")
```

Я столкнулся с проблемой: несмотря на то, что я добавил `"\n"` в код, при каждом вызове этой функции информация записывается в одну и ту же строку файла. Как можно сделать так, чтобы новая информация добавлялась с новой строки в логе?
  • 14 сентября 2024 г. 13:53
Ответы на вопрос 2
Ваша проблема заключается в том, что вы открываете файл `user_log.txt` в режиме `'r+'`, который позволяет как читать, так и записывать данные, но не гарантирует, что вы будете добавлять содержимое в конец файла. Чтобы убедиться, что новые записи добавляются с новой строки в конец файла, вам нужно использовать режим `'a'` (Append), который открывает файл для добавления данных.

Кроме того, рекомендуется использовать контекстный менеджер `with`, который автоматически закрывает файл после завершения работы с ним. Это обеспечит, что файл будет закрыт корректно, и вы избежите утечек ресурсов.

Вот исправленная версия вашей функции:

```python
async def add_user_log_list(user_name, bad_word, text, userID_sender, time):
    with open('logs/user_log.txt', 'a', encoding='utf8') as user_log:
        user_log.write('[' + str(time) + ']' + " @" + user_name + "("+ str(userID_sender) +")" + " использовал запрещеное слово <" + str(bad_word) + "> в своем сообщении: " + str(text) + "\n")
```

С этими изменениями:

1. Файл открывается в режиме `'a'`, что означает, что все новые записи будут добавляться в конец файла.
2. Используется `with`, чтобы файл автоматически закрылся после завершения блока.

Теперь каждый вызов вашей функции будет добавлять новую запись на новую строку в лог-файл.
1. Надо открывать файл не в режиме "r+", так он будет постоянно перезаписываться, а в режиме "a" 
2. Открывать файл лучше через контекстный менеджер with
Похожие вопросы