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

Logger 및 Lograge를 사용하여 Ruby에 로그인

Ruby에서 로그 작업

로깅은 애플리케이션이 일반적으로 처리하는 기본 작업 중 하나입니다. 로그는 예를 들어 다음이 필요할 때 사용됩니다.

  • 앱 내부에서 일어나는 일 확인,
  • 모니터링하거나
  • 특정 데이터에 대한 측정항목을 수집합니다.

새로운 프로그래밍 언어를 배울 때 정보를 기록하기 위해 가장 먼저 선택하는 것은 기본 메커니즘입니다. 일반적으로 쉽고 문서화되어 있으며 커뮤니티 전체에 널리 퍼져 있습니다.

로그 데이터는 회사, 비즈니스 및 작업 중인 애플리케이션 유형에 따라 많이 다릅니다. 따라서 귀하와 귀하의 팀이 선택한 로깅 솔루션이 전반적인 사용에 어떤 영향을 미치는지 이해하는 것이 매우 중요합니다.

이 기사에서는 Ruby 및 Rails의 기본 제공 옵션부터 사랑받는 타사 커뮤니티 프레임워크에 이르기까지 사용 가능한 로깅 옵션을 살펴보겠습니다. 가자!

Ruby의 내장 옵션

Ruby에는 로깅을 처리하기 위한 두 가지 기본 제공 옵션이 있습니다. 인쇄 명령(명령줄 시나리오용으로 특별히 설계됨)과 Logger 클래스입니다.

잠시 살펴보겠습니다.

콘솔에 인쇄

Ruby에는 콘솔에 텍스트를 인쇄하는 네 가지 일반적인 방법이 있습니다. puts , print , p , 및 pp .

puts 메소드는 전달한 모든 것을 인쇄하고 그 뒤에 새 행이 옵니다.

2.7.0 :001 > puts "Hey, I'm a log!"
Hey, I'm a log!
 => nil

print 메소드는 puts와 유사합니다. 그러나 항상 to_s를 사용하여 인수를 문자열로 변환합니다. 방법.

마지막으로 ppp 메소드는 둘 다 변환을 수행하지 않고 전달하는 원시 객체를 인쇄합니다. 유일한 차이점은 후자는 출력 형식을 더 들여쓰기하지만 전자는 그렇지 않다는 것입니다.

애플리케이션 로그

서버에서 실행되는 애플리케이션의 경우 콘솔에 인쇄하는 것은 의미가 없습니다.

대신 Logger를 사용합니다. 훨씬 더 유연한 클래스입니다.

"디버그" 로그를 인쇄하는 데 사용하는 방법은 다음과 같습니다.

require "logger"
logger = Logger.new(STDOUT)
logger.debug("I'm a debug log")

또한 로그를 파일에 저장하도록 구성하거나 원하는 경우 STDOUT으로 인쇄하는 대신 로그 수집기로 보낼 수도 있습니다.

궁금한 경우 "디버그"는 로그 수준입니다. 로그 수준을 통해 시스템에 "이 로그 메시지는 특정 종류의 이벤트와 관련이 있습니다."라고 알릴 수 있습니다. 기본 제공 로그 수준에는 치명적, 오류, 경고, 정보, 디버그 및 알 수 없음의 6가지가 있습니다.

logger.debug("I'm a debug log")
logger.info("I'm an info log")
logger.warn("I'm a warn log")
logger.error("I'm an error log: error message")
logger.fatal("I'm a fatal log")

로그 출력을 보면 로그 수준, 프로세스 ID 및 타임스탬프가 각 줄에 추가되었음을 알 수 있습니다.

Logger 및 Lograge를 사용하여 Ruby에 로그인

또 다른 훌륭한 기능은 Logger 특정 수준의 개체:

logger.level = Logger::WARN

이렇게 하면 Logger 경고와 같거나 더 높은 로그만 처리합니다. 중요합니다. 이것은 크기나 보안상의 이유로 "디버그" 로그를 저장하고 싶지 않을 수 있는 프로덕션에서 매우 유용합니다.

다음과 같이 출력해야 합니다.

Logger 및 Lograge를 사용하여 Ruby에 로그인

로그 사용자 정의

로그를 사용자 정의하려는 경우 다양한 옵션이 있습니다. 예를 들어 날짜와 시간을 변경하려면 기본값을 덮어씁니다.

logger.datetime_format = "%Y-%m-%d %H:%M"

다음은 출력의 예입니다.

W, [2020-07-28 10:50#87786]  WARN -- : I'm a warn log

date_time 형식은 표준 사양을 따르므로 변경 시 반드시 참조하시기 바랍니다.

그러나 때로는 로그 형식을 완전히 수정해야 할 수도 있습니다. 이를 위해 Ruby는 Formatter 클래스를 제공합니다. 개발자가 Logger 로그를 인쇄하는 데 사용합니다.

앱이 중앙 집중식 로그 분석 도구를 사용하고 모든 로그를 name=value에 인쇄해야 한다고 상상해 보세요. 체재. 이것은 새로운 포맷터 코드가 됩니다:

logger.formatter = proc do |severity, datetime, progname, msg|
    date_format = datetime.strftime("%Y-%m-%d %H:%M:%S")
    "date=[#{date_format}] severity=#{severity.ljust(5)} pid=##{Process.pid} message='#{msg}'\n"
end

여기에서는 proc를 사용하고 있습니다. 모든 로그를 가로채서 원하는 로그로 인쇄되는 기본 방식을 변경합니다. 이제 다음과 같은 결과를 얻었습니다.

Logger 및 Lograge를 사용하여 Ruby에 로그인

이제 몇 줄의 코드로 모든 앱 로그를 도구로 색인화할 수 있습니다.

JSON에 로깅

Formatter의 강력한 기능 한편, 원하는 출력 유형으로 로그를 쉽게 사용자 정의할 수 있습니다. 예를 들어 JSON 모듈을 사용하여 해당 형식으로 로그를 출력할 수 있습니다.

require "json"
logger.formatter = proc do |severity, datetime, progname, msg|
    date_format = datetime.strftime("%Y-%m-%d %H:%M:%S")
    JSON.dump(date: "#{date_format}", severity:"#{severity.ljust(5)}", pid:"##{Process.pid}", message: msg) + "\n"
end

결과 로그는 다음과 같습니다.

Logger 및 Lograge를 사용하여 Ruby에 로그인

파일에 로깅

이전에 보았듯이 Logger 생성자는 첫 번째 인수로 로그를 저장할 위치를 받습니다.

로그를 파일에 저장하려면 다음과 같이 말하십시오.

require 'logger'
logger = Logger.new('my_logs.log')

새 파일 my_logs.log가 생성됩니다. 이 코드가 포함된 Ruby 파일이 있는 동일한 폴더에:

Logger 및 Lograge를 사용하여 Ruby에 로그인

그러나 이 클래스는 보존 정책 구성과 같은 다양한 사용자 지정 옵션도 허용합니다. 다음 예를 들어보세요.

# Keep data for the current week.
Logger.new('my_weekly_logs.log', 'weekly')
# Keep data for today and the past 2 months.
Logger.new('my_latest_2_months_logs.log', 2, 'monthly')
# Restarts the log over when it exceeds 26GB in size.
Logger.new('my_custom_logs.log', 0, 20 * 1024 * 1024 * 1024)

두 번째 매개변수로 Logger 로그를 유지하거나 지워야 하는 빈도에 대한 정의를 수락합니다.

첫 번째 개체에서 로그는 일주일 동안만 보관됩니다. 두 번째는 2개월 동안 저장하고 최신은 세 번째 매개변수를 기준으로 파일 크기만 분석합니다(예:20GB에 도달할 때마다 삭제됨).

Ruby on Rails에 로그인

Logger의 대부분의 이점 우리는 지금까지 모두 Rails 앱과 함께 사용할 수 있음을 보았습니다. Logger의 Rails 버전 Ruby의 기본 클래스를 간단히 확장한 것입니다.

그 외에도 Rails는 개발자가 자신의 로그를 여러 로거에 브로드캐스트할 수 있는 멋진 기능을 추가합니다. 따라서 둘 이상의 로깅 라이브러리로 작업하려면 Rails logger 내에서 작업할 수 있습니다. :

custom_logger = Logger.new(STDOUT)
Rails.logger.extend(ActiveSupport::Logger.broadcast(custom_logger))

이는 로그가 있어야 하는 장소에 대한 정보가 필요할 때도 유용할 수 있습니다. 앱의 일부는 다른 위치 또는 다른 형식의 로그가 필요할 수 있습니다.

타사 로깅 프레임워크 선택

Ruby의 내장 로거가 필요한 작업을 정확히 수행하지 못하는 경우 옵션이 있습니다.

타사 로깅 프레임워크를 선택하는 데에는 다양한 옵션이 있습니다. 이 중 가장 인기 있는 것은 Lograge입니다. 살펴보겠습니다!

Lograge의 첫 단계

Lograge는 Rails 앱용으로 만들어졌습니다. 바닐라 루비로 작업한다면 좋은 선택이 아닐 수 있습니다.

설치하려면 다음 gem을 추가하기만 하면 됩니다.

bundle add lograge

그런 다음 config/initializers/lograge.rb에서 새 구성 파일을 만듭니다. 다음 코드로:

Rails.application.configure do
    config.lograge.enabled = true
    config.lograge.custom_options = lambda do |event|
        { time: event.time }
    end
end

이 구성은 Lograge를 활성화하고 프레임워크에 대한 이벤트로 간주되는 로그가 인쇄되어야 하는 시간을 정의합니다.

Rails 앱을 시작하고 첫 번째 엔드포인트에 액세스하면 Lograge가 요청 요약을 인쇄합니다. Lograge 설정 전과 후의 로그를 각각 비교하면 아래와 같은 결과가 나타납니다.

Logger 및 Lograge를 사용하여 Ruby에 로그인

다시 말하지만, Lograge는 은총알이 아닙니다. 그것은 실제로 매우 독단적인 프레임워크입니다. 따라서 내장된 Logger와 함께 사용해야 할 것입니다. (또는 선호하는 다른 프레임워크).

마무리

결국 로깅이 프로젝트의 중요한 부분일 뿐만 아니라 매우 과소평가된다는 것이 더 분명해집니다. 기본 도구인지 여부에 관계없이 사용 중인 도구를 더 잘 이해하면 더 나은 결과를 얻는 데 도움이 됩니다.

새로운 프레임워크를 채택하기 위해 항상 많은 테스트를 수행해야 합니다. 때때로 귀하의 플랫폼에는 이미 훌륭한 내장 옵션이 번들로 제공됩니다. 그렇지 않은 경우 이미 내부에 있는 프레임워크와 통합된 다른 프레임워크의 사용을 허용하는지 확인합니다.

행운을 빕니다!