Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

이벤트 및 오류 메시지를 추적하기 위해 Ruby에서 로그를 사용하는 방법

로깅은 Ruby 애플리케이션이 수행하는 작업에 대한 정보를 저장하는 프로세스입니다.

개발 및 프로덕션 환경 모두에서 매우 유용합니다.

왜?

로깅의 요점은 무슨 일이 일어났는지, 무엇이 잘못되었고 무엇이 잘되었는지에 대한 정보를 수집하는 것이기 때문입니다.

모든 종류의 정보를 기록할 수 있습니다. :

  • 느린 SQL 쿼리(찾고 수정할 수 있도록)
  • 오류 메시지
  • 자세한 요청 정보(URL, Controller, Params, Views…)

이 정보를 사용하면 애플리케이션에서 문제의 원인을 더 빨리 진단하고 찾을 수 있습니다.

Rails 앱에서 로그는 /log 아래에 저장됩니다. 폴더.

개발 모드에서 development.log 파일이 사용되고 rails server를 실행 중인 터미널에 로그 출력이 표시됩니다. 에.

지금 :

Logger를 사용하여 Ruby에 로그인하는 방법을 알아보겠습니다. 수업!

로거 클래스

Ruby Logger 클래스는 기본 출력 형식과 다양한 심각도 수준으로 로그를 생성하는 방법을 제공합니다.

로그를 만드는 방법은 다음과 같습니다. :

logger = Logger.new("my_log.txt")

이렇게 하면 my_log.txt에 로깅 메시지가 기록됩니다. .

프로그램이 실행되는 터미널에 메시지를 표시하려면 STDOUT에 로그인하면 됩니다. .

좋아요 :

logger = Logger.new(STDOUT)

로깅 메시지는 얼마나 중요한지에 따라 다른 수준을 가질 수 있습니다.

레벨은 :

  • 디버그
  • 정보
  • 경고
  • 오류
  • 치명적
  • 알 수 없음

모든 레벨에는 해당 인스턴스 메소드가 있습니다.

따라서 "정보"를 기록하려면

이렇게 하세요 :

logger.info("I'm reading a RubyGuide about logging!")

실제 로그 항목은 다음과 같습니다. :

# I, [2019-08-08T19:22:00.152079 #642]  INFO -- : I'm reading a RubyGuide about logging!

이러한 다양한 수준을 사용하면 로그 파일을 필터링하는 데 도움이 되어 원하는 것을 더 빨리 찾을 수 있습니다!

또한 시간이 지남에 따라 생성하는 오류 및 경고 메시지의 수를 확인하는 데 도움이 됩니다.

좋은 자료입니다!

로그 형식 지정 방법

Ruby 로그에 기본 출력 형식을 사용하는 것이 좋습니다. 도구를 기반으로 빌드할 수 있고 더 많은 사람들이 작동 방식을 이해할 수 있기 때문입니다.

여기에 다시 로그 줄이 있습니다. :

# I, [2019-08-08T19:22:00.152079 #642]  INFO -- : test

몇 가지 구성요소가 있습니다. :

  • "I"는 심각도 수준의 첫 글자를 나타냅니다.
  • 괄호 안에는 이 로그 메시지를 생성한 프로세스의 타임스탬프 및 프로세스 ID(PID)가 표시됩니다.
  • INFO는 심각도 수준의 전체 이름입니다.
  • 콜론 뒤에 기록된 실제 메시지가 있습니다.

그러나 이 형식은 모든 사람에게 적합하지 않을 수 있습니다.

따라서 Ruby를 사용하여 변경할 수 있습니다!

방법은 다음과 같습니다. :

logger.formatter = proc { |severity, datetime, progname, msg| "#{severity}, #{datetime}, #{msg}\n" }

결과적으로 다음과 같은 결과를 얻습니다. :

DEBUG, 2019-08-08 19:39:01 +0200, testing

이를 사용하여 귀하와 귀하의 팀에 도움이 될 수 있는 추가 정보를 추가할 수 있습니다.

로그 크기를 제한하는 방법

로그의 크기를 추적하지 않는 한 로그는 정말 큰 파일이 될 수 있습니다.

로그 때문에 디스크 공간이 부족하면 시스템에서 온갖 이상한 일이 일어나기 시작합니다.

해결책이 있습니다!

로그 크기를 제한할 수 있습니다.

방법은 다음과 같습니다. :

MEGABYTE = 1024 ** 2
ONE_HUNDRED_MEGABYTES = MEGABYTE * 100

logger = Logger.new("my_log.txt", 1, ONE_HUNDRED_MEGABYTES)

첫 번째 매개변수는 로그 메시지를 저장할 위치입니다.

2번째 매개변수는 보관할 로그 파일 수(로그 회전)이고 마지막 매개변수는 최대 파일 크기입니다.

로그 읽기 및 필터링

알겠습니다. 로그를 가져왔습니다.

어떻게 읽고 필요한 것을 찾으십니까?

로그는 일반 텍스트 파일이므로 원하는 텍스트 처리 도구를 사용할 수 있습니다.

예를 들어 :

그렙.

텍스트 파일을 필터링하는 데 사용할 수 있는 명령줄 도구입니다.

방법은 다음과 같습니다. :

grep INFO my_log.txt

이것은 "INFO"로 기록된 모든 라인을 제공합니다.

다른 텍스트를 검색할 수 있습니다. grep를 사용하여 로그 내부에 , "INFO"를 찾고 있는 것으로 바꾸면 됩니다.

사용할 수 있는 또 다른 Unix 도구는 less입니다. (-R 옵션 사용).

키보드만 사용하여 로그를 스크롤할 수 있으며 검색 기능이 있습니다. .

다음을 사용할 수도 있습니다...

로그 관리 및 검색 전용 도구입니다.

Discourse의 로그스터 젬처럼

요약

Ruby 로그인, 정의, 작동 방식 및 사용 방법에 대해 배웠습니다.

이제 당신이 이것을 시도할 차례입니다.

읽어주셔서 감사합니다!