728x90
300x250
저만의 사이드 프로젝트를 하고 있는 상태입니다
현재 crontab으로 돌아가는 파일의 log를 bot.log파일로 저장하고 있는데
오류가 날 때마다 컴퓨터를 켜고 EC2에 접속해서 log파일을 열어서
일일이 확인하는 것이 너무 불편하다고 생각했습니다.
그래서 현재 돌아가고 있는 EC2안 Flask 웹 서버에서 log를 확인할 수 있게 만들려고 합니다.
이렇게 되면 모바일이든 PC든 EC2 IP주소로 언제 어디서든지 log를 확인할 수 있습니다.
먼저 bot.py 파일이 실행되고 그 log들을 bot.log에 저장하고 있습니다.
0 * * * * python3 /home/ec2-user/bot/bot.py >> /home/ec2-user/bot/bot.log 2>&1
이런식으로 log를 저장할 수 있습니다.
여기서 이 log파일을 어떻게 읽고 어떻게 Flask에 출력할지 고민했는데
엉성하지만 제일 간단한 방법으로 가고자 마음먹었습니다.
1. 저장되어 있는 bot.log를 bot.py가 실행될 때마다 MongoDB에 삽입하기로 했습니다.
def read_log():
log = open('bot.log', 'rt') # bot.log 파일을 읽기모드로 연다음
line_log = []
loglines = log.readlines()
loglines = loglines[-100:] # log전체는 필요없으니 100줄만 읽어오도록 합니다.
for line in loglines:
line_log.append(line) # 1줄씩 리스트에 넣습니다.
log.close()
func.delete_item_many(mongo, {}, "alarm", "log") # log를 업데이트하기 위해 그 전 log를 전부 지웁니다.
for i in line_log:
func.insert_item_one(mongo, {'log':str(i)}, 'alarm', 'log') # log를 한 줄씩 MongoDB에 넣습니다
print('readed log') # read를 마쳤다는 메시지를 표시합니다.
# func안 함수
def delete_item_many(mongo, condition=None, db_name=None, collection_name=None):
result = mongo[db_name][collection_name].delete_many(condition)
return result
def insert_item_one(mongo, data, db_name=None, collection_name=None):
result = mongo[db_name][collection_name].insert_one(data).inserted_id
return result
2. 그런 다음 Flask에서 log페이지를 따로 설정하여 만들어줍니다.
@app.route('/log', methods = ['GET', 'POST']) # 사용할데가 있을까봐 methods를 넣어놨습니다.
def render_log():
log_list = []
log_all = func.find_item(mongo, None, "alarm", "log")
for i in log_all:
log_list.append(i['log']) # 리스트안에 리스트 형식으로 1줄씩 넣어줍니다.
print(log_list)
return render_template('log.html', log = log_list) # 이 log 리스트를 바탕으로 log.html을 엽니다.
3. 그 후 html에서 한 줄씩 출력되게 코딩합니다.
<body>
<br><br><br><br>
<center>
<div style="font-size: 1.2em; color: rgb(238, 231, 231);">
{% for n in log %} # 이 부분에서 log를 한 줄씩 출력시킵니다.
{{n}}<br>
{% endfor %}
</div>
<br><br><br>
</center>
</body>
4. 그 후 웹서버에서 로그를 보면
이런식으로 출력되게 됩니다.
아직은 좀 엉성하고 미숙한 부분이 많지만 차차 조금씩 수정해가면서 고쳐보겠습니다.
728x90
300x250
'Python' 카테고리의 다른 글
Slack 알람을 Flask를 통해 제어하기 (0) | 2022.04.04 |
---|---|
Pipenv 명령어 모음 (0) | 2022.03.15 |
파이썬 - Deque(데크) (0) | 2021.12.20 |
파이썬-실습(11) 카카오 챗봇과 앱의 연계 (0) | 2021.12.17 |
파이썬-실습(10) 카카오톡 친구들에게 API로 메시지 보내기 (0) | 2021.12.17 |