[1] Logger
1. config/settings.py 파일에 추가
# 로그 파일 저장소 설정
LOG_FILE = os.path.join(BASE_DIR, 'data/mylog.csv')
LOGGING = {
'version': 1,
# 기존의 로깅 설정을 비활성화 할 것인가?
'disable_existing_loggers': False,
# 포맷터
# 로그 레코드는 최종적으로 텍스트로 표현됨
# 이 텍스트의 포맷 형식 정의
# 여러 포맷 정의 가능
'formatters': {
'format1': {
'format': '[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s',
'datefmt': '%d/%b/%Y %H:%M:%S'
},
'format2': {
'format': '%(levelname)s %(message)s'
},
'format3': {
'format': '%(asctime)s,%(message)s',
'datefmt': '%Y-%m-%d-%H-%M-%S'
}
},
# 핸들러
# 로그 레코드로 무슨 작업을 할 것인지 정의
# 여러 핸들러 정의 가능
'handlers': {
# 로그 파일을 만들어 텍스트로 로그레코드 저장
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': LOG_FILE,
'formatter': 'format3',
},
# 콘솔(터미널)에 출력
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'format2',
}
},
# 로거
# 로그 레코드 저장소
# 로거를 이름별로 정의
'loggers': {
'users': {
'handlers': ['file'],
'level': 'DEBUG',
},
'items': {
'handlers': ['console'],
'level': 'DEBUG',
},
'iot_file': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
},
},
}
2. views_item.py 에 Logger 적용
- logger = logging.getLogger('iot_file')
-> iot_file 로 된 logger를 사용
- logger.debug(obj.name+','+str(obj.price)+','+name)
-> ( ) 안의 내용으로 message 전송 (string 형식으로 넣어야 함)
- 아래의 경우, 상품명, 가격, 그리고 로그인 상태에서는 해당 사용자의 이름, 아니면 guest를 저장
@request_mapping("/g/<int:pk>", method="get")
def get(self, request, pk):
obj = Item.objects.get(id=pk)
# ----------------logger-------------------
name = 'guest'
if request.session['sessionname'] is not None:
name = request.session['sessionname']
logger = logging.getLogger('iot_file')
logger.debug(obj.name+','+str(obj.price)+','+name)
# -----------------------------------------
context = {
'center': 'item/get.html',
'obj': obj
};
return render(request, 'home.html', context)
- 출력 결과 : data/mylog.csv 에 저장, terminal에 출력
[2] IoT 장비 data를 Logger 로 저장
- Data(온도-temp와 전력량-el)를 IoT 장비에서 받는다고 가정
1. config/settings.py 파일에 추가
- IOT_FILE 저장소 추가
- handlers 에 file2 추가
- loggers 에 el_file 추가
IOT_FILE = os.path.join(BASE_DIR, 'data/iotlog.csv') # IoT 장비에서 받은 데이터 저장소 설정
# 핸들러
# 로그 레코드로 무슨 작업을 할 것인지 정의
# 여러 핸들러 정의 가능
'handlers': {
# 로그 파일을 만들어 텍스트로 로그레코드 저장
'file': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': LOG_FILE,
'formatter': 'format3',
},
'file2': {
'level': 'DEBUG',
'class': 'logging.FileHandler',
'filename': IOT_FILE,
'formatter': 'format3',
},
# 콘솔(터미널)에 출력
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'format2',
}
},
# 로거
# 로그 레코드 저장소
# 로거를 이름별로 정의
'loggers': {
'users': {
'handlers': ['file'],
'level': 'DEBUG',
},
'items': {
'handlers': ['console'],
'level': 'DEBUG',
},
'iot_file': {
'handlers': ['file', 'console'],
'level': 'DEBUG',
},
'el_file': {
'handlers': ['file2', 'console'],
'level': 'DEBUG',
2. views.py 에 Logger 적용
- 서버로 127.0.0.1/iot 요청이 오는 경우
- el_file logger 사용
- id, temp, el (url의 querystring 내부의 key값들, 밑에 설명)를 받아서 저장 및 출력
@request_mapping("/iot", method="get")
def iot(self, request):
id = request.GET['id']
temp = request.GET['temp']
el = request.GET['el']
# --------------------------------------------
el_logger = logging.getLogger('el_file')
el_logger.debug(id+','+temp+','+el)
# --------------------------------------------
return render(request, 'ok.html')
3. IoT 장비로부터 데이터 전송 가정
- 별도 프로젝트 생성하여 main.py에서 실행(실제로 데이터 받아서 보낼 때의 형식과 다름)
- url 요청 방법
① urllib 를 import
② url 변수에 요청 url을 string으로 저장
- ?(물음표) : querystring 의 시작이라는 의미
- querystring 안에는 key=value 쌍이 들어가고, 각각의 쌍은 &(엠퍼센트) 로 구분
③ url을 서버에 요청 : urllib.request.urlopen(url)
import random
import time
import urllib.request
def send(name):
for i in range(20):
id = 'h01'
temp = random.randint(1, 30)
el = random.randint(1, 100)
# http://127.0.0.1/iot?id=h01&temp=10&el=100
url = 'http://127.0.0.1/iot?id='+id+'&temp='+str(temp)+'&el='+str(el)
urllib.request.urlopen(url)
time.sleep(3)
if __name__ == '__main__':
send('PyCharm')
- 출력 결과
'프로젝트형 IoT 서비스 개발 4회차 > 1. 인터페이스 개발' 카테고리의 다른 글
[Day26] 2022-03-04(금) Web Application 7 - Ajax - 이진만 강사님 (0) | 2022.03.04 |
---|---|
[Day25] 2022-03-03(목) Web Application 6 - Map - 이진만 강사님 (0) | 2022.03.03 |
[Day23] 2022-02-28(월) Web Application 4 - Django 활용 - 이진만 강사님 (0) | 2022.03.01 |
[Day21] 2022-02-24(목) Web Application 3 - Django ORM 셋팅 - 이진만 강사님 (0) | 2022.02.24 |
[Day19] 2022-02-22(화) Web Application 2 - Bootstrap, Python Anywhere - 이진만 강사님 (0) | 2022.02.22 |