Dalam rails saya ingin mencatat beberapa informasi dalam file log yang berbeda dan bukan development.log standar atau production.log. Saya ingin melakukan logging ini dari kelas model.
sumber
Dalam rails saya ingin mencatat beberapa informasi dalam file log yang berbeda dan bukan development.log standar atau production.log. Saya ingin melakukan logging ini dari kelas model.
Anda dapat membuat objek Logger sendiri dari dalam model apa pun. Cukup berikan nama file ke konstruktor dan gunakan objek seperti Rails biasa logger
:
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
Di sini saya menggunakan atribut class untuk memoize the logger. Dengan cara ini tidak akan dibuat untuk setiap objek Pengguna tunggal yang akan dibuat, tetapi Anda tidak diharuskan untuk melakukannya. Ingat juga bahwa Anda dapat menyuntikkan my_logger
metode secara langsung ke dalam ActiveRecord::Base
kelas (atau ke dalam superkelas Anda sendiri jika Anda tidak suka terlalu banyak menambal monyet) untuk membagikan kode di antara model aplikasi Anda.
User.logger = Logger.new(STDOUT)
atau ke mana pun Anda ingin masuk. Dengan cara yang sama,ActiveRecord::Base.logger = Logger.new(STDOUT)
akan mengubah semua pencatatan untuk semua model.User.logger = Logger.new(STDOUT)
mengubah semua pencatatan untuk semua model. Yah, itu berubahActiveRecord::Base.logger
my_logger
diapplication_controller.rb
.Memperbarui
Saya membuat permata berdasarkan solusi di bawah ini, yang disebut multi_logger . Lakukan ini di penginisialisasi:
dan telepon
dan kamu selesai.
Jika Anda ingin membuat kode sendiri, lihat di bawah:
Solusi yang lebih lengkap adalah dengan menempatkan yang berikut ini di direktori
lib/
atau Andaconfig/initializers/
.Keuntungannya adalah Anda dapat mengatur formatter untuk membuat awalan cap waktu atau tingkat keparahan ke log secara otomatis. Ini dapat diakses dari mana saja di Rails, dan terlihat lebih rapi dengan menggunakan pola tunggal.
sumber
#{$$}
?Opsi yang layak yang berfungsi untuk saya adalah menambahkan kelas yang cukup sederhana ke
app/models
folder Anda sepertiapp/models/my_log.rb
kemudian di controller Anda, atau benar-benar hampir di mana saja Anda bisa mereferensikan kelas model dari dalam aplikasi rails Anda, yaitu di mana pun Anda bisa melakukan
Post.create(:title => "Hello world", :contents => "Lorum ipsum");
atau sesuatu yang serupa Anda dapat masuk ke file kustom Anda seperti inisumber
Tentukan kelas logger di (katakanlah) app / models / special_log.rb:
inisialisasi logger di (katakanlah) config / initializers / special_log.rb:
Di mana saja di aplikasi Anda, Anda dapat masuk dengan:
sumber
Berikut ini logger khusus saya:
sumber
sumber
Saya akan menyarankan menggunakan permata Log4r untuk penebangan kustom. Mengutip deskripsi dari halamannya:
sumber
sumber
Kerangka Penebangan, dengan nama yang tampak sederhana, memiliki kecanggihan yang Anda idamkan!
Ikuti instruksi sangat singkat dari logging-rails untuk memulai menyaring kebisingan, mendapatkan peringatan, dan memilih output dengan cara yang halus dan tingkat tinggi.
Tepuk-tepuk diri Anda sendiri ketika Anda selesai. Log-rolling, setiap hari. Layak untuk itu saja.
sumber