[RUBY-ON-RAILS] 어떻게 독립적 인 로그 파일에 레일에 뭔가를 기록하려면?
RUBY-ON-RAILS어떻게 독립적 인 로그 파일에 레일에 뭔가를 기록하려면?
레일에서 나는 다른 로그 파일에 일부 정보가 아닌 표준 development.log 파일 또는 production.log를 기록합니다. 나는 모델 클래스에서이 로깅을 수행 할.
해결법
-
==============================
1.당신은 어떤 모델 내부에서 로거 객체를 직접 만들 수 있습니다. 그냥 생성자에 파일 이름을 전달하고 일반 레일 로거와 같은 개체를 사용 :
당신은 어떤 모델 내부에서 로거 객체를 직접 만들 수 있습니다. 그냥 생성자에 파일 이름을 전달하고 일반 레일 로거와 같은 개체를 사용 :
class User < ActiveRecord::Base def my_logger @@my_logger ||= Logger.new("#{Rails.root}/log/my.log") end def before_save my_logger.info("Creating user with name #{self.name}") end end
여기에 내가 로거를 memoize하는 클래스 속성을 사용했다. 이 방법은가 작성되는 모든 단일 사용자 개체에 대해 작성되지 않습니다,하지만 당신은 그렇게 할 필요가 없습니다. 당신은 액티브 :: 기본 클래스에 직접 my_logger 방법을 주입 (또는 자신의 일부 슈퍼 클래스에 너무 많은 원숭이 패치 마음에 들지 않으면) 앱의 모델 사이의 코드를 공유 할 수 있다는 것을 기억하라.
-
==============================
2.최신 정보
최신 정보
나는 multi_logger라는 아래의 솔루션을 기반으로 보석을했다. 그냥 초기화에서이 작업을 수행 :
MultiLogger.add_logger('post')
및 전화
Rails.logger.post.error('hi') # or call logger.post.error('hi') if it is accessible.
작업이 완료된다.
당신이 자신의 코드를 원하는 경우, 아래 참조 :
더 완벽한 솔루션은 lib 디렉토리 / 또는 설정 / 초기화 / 디렉토리에 다음을 배치하는 것입니다.
이점은 포맷터에 접두사 타임 스탬프 또는 심각도 로그에 자동으로 설치 할 수 있다는 것입니다. 이 레일에서 어디서나 접근 할 수 있으며, 외모는 싱글 톤 패턴을 사용하여 깔끔한.
# Custom Post logger require 'singleton' class PostLogger < Logger include Singleton def initialize super(Rails.root.join('log/post_error.log')) self.formatter = formatter() self end # Optional, but good for prefixing timestamps automatically def formatter Proc.new{|severity, time, progname, msg| formatted_severity = sprintf("%-5s",severity.to_s) formatted_time = time.strftime("%Y-%m-%d %H:%M:%S") "[#{formatted_severity} #{formatted_time} #{$$}] #{msg.to_s.strip}\n" } end class << self delegate :error, :debug, :fatal, :info, :warn, :add, :log, :to => :instance end end PostLogger.error('hi') # [ERROR 2012-09-12 10:40:15] hi
-
==============================
3.나를 위해 작품을 그냥 앱에 상당히 일반 클래스를 추가하는 것입니다 괜찮은 옵션 / 모델은 응용 프로그램 / 모델 / my_log.rb으로 폴더
나를 위해 작품을 그냥 앱에 상당히 일반 클래스를 추가하는 것입니다 괜찮은 옵션 / 모델은 응용 프로그램 / 모델 / my_log.rb으로 폴더
class MyLog def self.debug(message=nil) @my_log ||= Logger.new("#{Rails.root}/log/my.log") @my_log.debug(message) unless message.nil? end end
(:, 제목 => "안녕하세요 세계"내용 => "Lorum ipsum의") 다음 정말 거의 모든 곳에서 당신은 당신의 레일 응용 프로그램 내에서 모델의 클래스를 참조 할 수 있다고 컨트롤러, 또는에서, 즉 어디서나 Post.create을 할 수있는; 또는 비슷한는이 같은 사용자 정의 파일에 로그인 할 수 있습니다
MyLog.debug "Hello world"
-
==============================
4.(예를 들어) 응용 프로그램 / 모델 / special_log.rb에서 로거 클래스를 정의합니다 :
(예를 들어) 응용 프로그램 / 모델 / special_log.rb에서 로거 클래스를 정의합니다 :
class SpecialLog LogFile = Rails.root.join('log', 'special.log') class << self cattr_accessor :logger delegate :debug, :info, :warn, :error, :fatal, :to => :logger end end
설정 / 초기화 / special_log.rb (말)에서 로거를 초기화 :
SpecialLog.logger = Logger.new(SpecialLog::LogFile) SpecialLog.logger.level = 'debug' # could be debug, info, warn, error or fatal
어디서나 앱에, 당신은에 로그인 할 수 있습니다 :
SpecialLog.debug("something went wrong") # or SpecialLog.info("life is good")
-
==============================
5.여기에 내 사용자 정의 로거는 다음과 같습니다
여기에 내 사용자 정의 로거는 다음과 같습니다
class DebugLog def self.debug(message=nil) return unless Rails.env.development? and message.present? @logger ||= Logger.new(File.join(Rails.root, 'log', 'debug.log')) @logger.debug(message) end end
-
==============================
6.
class Article < ActiveRecord::Base LOGFILE = File.join(RAILS_ROOT, '/log/', "article_#{RAILS_ENV}.log") def validate log "was validated!" end def log(*args) args.size == 1 ? (message = args; severity = :info) : (severity, message = args) Article.logger severity, "Article##{self.id}: #{message}" end def self.logger(severity = nil, message = nil) @article_logger ||= Article.open_log if !severity.nil? && !message.nil? && @article_logger.respond_to?(severity) @article_logger.send severity, "[#{Time.now.to_s(:db)}] [#{severity.to_s.capitalize}] #{message}\n" end message or @article_logger end def self.open_log ActiveSupport::BufferedLogger.new(LOGFILE) end end
-
==============================
7.나는 사용자 지정 로깅 Log4r 보석을 사용하는 것이 좋습니다 것입니다. 그 페이지에서 설명을 인용 :
나는 사용자 지정 로깅 Log4r 보석을 사용하는 것이 좋습니다 것입니다. 그 페이지에서 설명을 인용 :
-
==============================
8.
class Post < ActiveRecord::Base def initialize(attributes) super(attributes) @logger = Logger.new("#{Rails.root}/log/post.log") end def logger @logger end def some_method logger.info('Test 1') end end ps = Post.new ps.some_method ps.logger.info('Test 2') Post.new.logger.info('Test 3')
-
==============================
9.로깅 프레임 워크는 그 현혹 간단한 이름으로, 당신이 갈망 정교함이있다!
로깅 프레임 워크는 그 현혹 간단한 이름으로, 당신이 갈망 정교함이있다!
의 매우 짧은 지침에 따라, 노이즈 필터링 경고를 받고, 그리고 세분화 된 높은 수준의 방법으로 출력을 선택하는 시작하는 로깅을-레일.
작업이 완료 될 때 뒷면에 자신을 팻. 매일, 로그 롤링. 혼자에 대한 가치가.
from https://stackoverflow.com/questions/337739/how-to-log-something-in-rails-in-an-independent-log-file by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 3 마이그레이션 레일 : 참조 열을 추가? (0) | 2020.02.21 |
---|---|
[RUBY-ON-RAILS] 어떻게 JSON에 루비 해시 객체를 변환하는? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 방법의 RoR에서 업적 시스템을 구현하는 (0) | 2020.02.21 |
[RUBY-ON-RAILS] 저장하지 않고 update_attributes 레일? (0) | 2020.02.21 |
[RUBY-ON-RAILS] 루트 디렉토리 경로를 레일? (0) | 2020.02.21 |