Python에 로그인
로깅은 일부 소프트웨어가 실행될 때 발생하는 이벤트를 추적하는 수단입니다. 로깅은 소프트웨어 개발, 디버깅 및 실행에 중요합니다. 로깅 기록이 없고 프로그램이 충돌하는 경우 문제의 원인을 발견할 가능성은 거의 없습니다. 그리고 원인을 찾아내면 많은 시간이 소모됩니다. 로깅을 사용하면 이동 경로의 흔적을 남길 수 있으므로 문제가 발생하는 경우 문제의 원인을 확인할 수 있습니다.
정수를 기대하는 경우 부동 소수점이 주어졌고 클라우드를 사용할 수 있는 등 다양한 상황이 있습니다. API , 유지 관리 등으로 인해 서비스가 중단되었습니다. 이러한 문제는 통제할 수 없으며 판단하기 어렵습니다.
print 문이 Pythonic이 아닌 이유
일부 개발자는 명령문이 올바르게 실행되었는지 또는 일부 오류가 발생했는지 확인하기 위해 명령문 인쇄 개념을 사용합니다. 하지만 인쇄하는 것은 좋은 생각이 아닙니다. 간단한 스크립트의 경우 문제를 해결할 수 있지만 복잡한 스크립트의 경우 인쇄 접근 방식이 실패합니다.
Python에는 내장 모듈이 있습니다. 벌채 반출 이를 통해 상태 메시지를 파일이나 기타 출력 스트림에 쓸 수 있습니다. 파일에는 코드의 어느 부분이 실행되고 어떤 문제가 발생했는지에 대한 정보가 포함될 수 있습니다.
Python 로깅 수준
로그 메시지에는 5가지 기본 제공 수준이 있습니다.
- 디버그: 이는 일반적으로 문제를 진단할 때만 관심이 있는 자세한 정보를 제공하는 데 사용됩니다.
- 정보: 이는 예상대로 작동하는지 확인하는 데 사용됩니다.
- 경고: 예상치 못한 일이 발생했거나 가까운 미래에 어떤 문제가 발생할 것을 나타내는 데 사용됩니다.
- 오류: 이는 더 심각한 문제로 인해 소프트웨어가 일부 기능을 수행할 수 없음을 나타냅니다.
- 비판적인: 이는 프로그램 자체가 계속 실행될 수 없음을 나타내는 심각한 오류를 나타냅니다.
필요한 경우 개발자는 더 많은 레벨을 생성할 수 있지만 이것만으로도 가능한 모든 상황을 처리하기에 충분합니다. 각 내장 레벨에는 숫자 값이 할당되었습니다.
로깅 모듈에는 여러 가지 기능이 포함되어 있습니다. 여기에는 여러 상수, 클래스 및 메서드가 있습니다. 모두 대문자로 된 항목은 상수이고, 대문자로 표시된 항목은 클래스이며, 소문자로 시작하는 항목은 메소드입니다.
기본 핸들러 자체에서 제공하는 여러 로거 개체가 있습니다.
- 로거.정보(msg): 그러면 이 로거에 INFO 수준의 메시지가 기록됩니다.
- 로거.경고(msg): 그러면 이 로거에 WARNING 수준의 메시지가 기록됩니다.
- 로거.오류(msg): 그러면 이 로거에 ERROR 수준의 메시지가 기록됩니다.
- 로거.중요(msg): 그러면 이 로거에 CRITICAL 수준의 메시지가 기록됩니다.
- 로거.log(lvl,msg): 그러면 이 로거에 정수 레벨 레벨의 메시지가 기록됩니다.
- 로거.예외(msg): 그러면 이 로거에 ERROR 수준의 메시지가 기록됩니다.
- 로거.set레벨(lvl): 이 함수는 이 로거의 임계값을 lvl로 설정합니다. 즉, 이 수준 아래의 모든 메시지는 무시됩니다.
- Logger.addFilter(필트): 그러면 이 로거에 맞는 특정 필터가 추가됩니다.
- Logger.removeFilter(필트): 그러면 이 로거에 맞는 특정 필터가 제거됩니다.
- 로거.필터(기록): 이 메소드는 제공된 레코드에 로거의 필터를 적용하고 레코드가 처리될 경우 True를 반환합니다. 그렇지 않으면 False를 반환합니다.
- Logger.addHandler(hdlr): 그러면 이 로거에 특정 핸들러 hdlr이 추가됩니다.
- Logger.removeHandler(hdlr) : 그러면 이 로거에서 특정 핸들러 hdlr이 제거됩니다.
- 로거.hasHandlers(): 로거에 핸들러가 구성되어 있는지 여부를 확인합니다.
유용한 핸들러
기본 핸들러 클래스 외에도 유용한 하위 클래스가 많이 제공됩니다.
| 매니저 | 설명 |
|---|---|
| 스트림 핸들러 | 스트림(파일과 유사한 객체)으로 메시지를 보냅니다. |
| 파일 핸들러 | 디스크 파일에 메시지를 보냅니다. |
| 베이스회전 핸들러 | 특정 지점에서 로그 파일을 회전하는 핸들러의 기본 클래스입니다. 사용 파일 핸들러 회전 또는 TimedRotatingFileHandler 대신에. |
| 파일 핸들러 회전 | 최대 로그 파일 크기 및 로그 파일 회전을 지원하여 디스크 파일에 메시지를 보냅니다. |
| TimedRotatingFileHandler | 특정 시간 간격으로 로그 파일을 순환하면서 디스크 파일에 메시지를 보냅니다. |
| 소켓 핸들러 | TCP/IP 소켓으로 메시지를 보냅니다. Python 3.4부터 Unix 도메인 소켓도 지원합니다. |
| 데이터그램 핸들러 | UDP 소켓으로 메시지를 보냅니다. Python 3.4부터 Unix 도메인 소켓도 지원합니다. |
| SMTPHandler | 지정된 이메일 주소로 메시지를 보냅니다. |
| SysLogHandler | 원격 시스템에 있는 Unix Syslog 데몬에 메시지를 보냅니다. |
| NTEventLogHandler | Windows NT/2000/XP 이벤트 로그에 메시지를 보냅니다. |
| 메모리 핸들러 | 특정 기준이 충족될 때마다 플러시되는 메모리의 버퍼에 메시지를 보냅니다. |
| HTTPHandler | GET 또는 POST 의미 체계를 사용하여 HTTP 서버에 메시지를 보냅니다. |
| WatchedFileHandler | 로깅 중인 파일을 감시합니다. 파일이 변경되면 파일 이름을 사용하여 닫았다가 다시 엽니다. |
| 큐 핸들러 | 대기열 또는 다중 처리 모듈에 구현된 것과 같은 대기열로 메시지를 보냅니다. |
| 널 핸들러 | 오류 메시지에는 아무 작업도 수행하지 않습니다. 라이브러리 개발자가 '로거에 대한 핸들러를 찾을 수 없습니다' 메시지를 방지하기 위해 사용합니다. |
Python 로깅 기본 사항
파일에 이벤트를 기록하기 위해 로깅 모듈을 사용하는 기본 사항은 매우 간단합니다. 이를 위해서는 라이브러리에서 모듈을 가져오기만 하면 됩니다.
- 로거를 생성하고 구성합니다. 여러 매개변수를 가질 수 있습니다. 그러나 중요한 것은 이벤트를 기록하려는 파일의 이름을 전달하는 것입니다.
- 여기서 로거의 형식도 설정할 수 있습니다. 기본적으로 파일은 다음에서 작동합니다. 추가 모드이지만 필요한 경우 쓰기 모드로 변경할 수 있습니다.
- 또한 각 레벨에 할당된 수치값을 기반으로 추적 임계값 역할을 하는 로거 레벨을 설정할 수 있습니다.
매개변수로 전달될 수 있는 여러 속성이 있습니다. - 모든 매개변수 목록은 다음과 같습니다. 파이썬 라이브러리 . 사용자는 요구사항에 따라 필수 속성을 선택할 수 있습니다.
그 후, 예시와 같이 객체를 생성하고 다양한 메소드를 사용해 보세요.
변수 로깅
이 코드는 오류 메시지를 기록하는 방법을 보여줍니다. login.error() 함수는 변수 이름에 %s 자리 표시자를 사용하여 오류 메시지를 기록하는 데 사용됩니다.
파이썬3
import> logging> name> => 'GFG'> logging.error(> '%s raised an error'> , name)> |
출력 :
ERROR:root:GFG raised an error
모든 레벨의 로깅
이 코드는 모든 로깅 수준을 보여줍니다.
파이썬
# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename> => 'newfile.log'> ,> > format> => '%(asctime)s %(message)s'> ,> > filemode> => 'w'> )> # Creating an object> logger> => logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(> 'Harmless debug Message'> )> logger.info(> 'Just an information'> )> logger.warning(> 'Its a Warning'> )> logger.error(> 'Did you try to divide by zero'> )> logger.critical(> 'Internet is down'> )> |
위 코드는 제공된 이름의 파일을 생성하며 파일을 열면 파일에 다음 데이터가 포함됩니다.
로깅 구성
파일에 로깅: temp.conf
[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler]
예:
코드는 다음의 구성을 사용하여 로깅 시스템을 설정합니다. temp.conf 파일. 다음과 같은 로거를 얻습니다. 간단한 예 다양한 로그 수준으로 메시지를 기록합니다.
파이썬3
import> logging> import> logging.config> logging.config.fileConfig(> 'temp.conf'> )> # create logger> logger> => logging.getLogger(> 'simpleExample'> )> # 'application' code> logger.debug(> 'debug message'> )> logger.info(> 'info message'> )> logger.warning(> 'warn message'> )> logger.error(> 'error message'> )> logger.critical(> 'critical message'> )> |
출력 :
2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message
Python 로깅 예외
로깅 중에 예외를 발생시키는 것은 특정 시나리오에서 애플리케이션의 예외 조건이나 오류를 나타내는 데 유용할 수 있습니다. 예외를 발생시키면 정상적인 실행 흐름을 중단하고 발생한 문제에 대해 호출자나 로깅 시스템에 알릴 수 있습니다.
이 코드에서는 로깅에 의해 포착되는 예외를 발생시킵니다. 예외.
파이썬3
import> logging> logging.basicConfig(level> => logging.DEBUG,> > format> => '%(asctime)s - %(levelname)s - %(message)s'> )> def> perform_operation(value):> > if> value <> 0> :> > raise> ValueError(> 'Invalid value: Value cannot be negative.'> )> > else> :> > # Continue with normal execution> > logging.info(> 'Operation performed successfully.'> )> try> :> > input_value> => int> (> input> (> 'Enter a value: '> ))> > perform_operation(input_value)> except> ValueError as ve:> > logging.exception(> 'Exception occurred: %s'> ,> str> (ve))> |
출력 :
Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative.