Dans les rails, je souhaite enregistrer certaines informations dans un fichier journal différent et non dans le fichier standard development.log ou production.log. Je veux faire cette journalisation à partir d'une classe de modèle.
la source
Dans les rails, je souhaite enregistrer certaines informations dans un fichier journal différent et non dans le fichier standard development.log ou production.log. Je veux faire cette journalisation à partir d'une classe de modèle.
Vous pouvez créer vous-même un objet Logger à partir de n'importe quel modèle. Passez simplement le nom du fichier au constructeur et utilisez l'objet comme les Rails habituels 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
Ici, j'ai utilisé un attribut de classe pour mémoriser l'enregistreur. De cette façon, il ne sera pas créé pour chaque objet User qui est créé, mais vous n'êtes pas obligé de le faire. Rappelez-vous également que vous pouvez injecter la my_logger
méthode directement dans la ActiveRecord::Base
classe (ou dans une superclasse de votre choix si vous n'aimez pas trop les patchs de singe) pour partager le code entre les modèles de votre application.
User.logger = Logger.new(STDOUT)
ou où vous souhaitez vous connecter. De la même manière,ActiveRecord::Base.logger = Logger.new(STDOUT)
changera toute la journalisation pour tous les modèles.User.logger = Logger.new(STDOUT)
changé toute la journalisation pour tous les modèles. Eh bien, ça a changéActiveRecord::Base.logger
my_logger
dansapplication_controller.rb
.Mettre à jour
J'ai créé un bijou basé sur la solution ci-dessous, appelé multi_logger . Faites simplement ceci dans l'initialiseur:
et appeler
et vous avez terminé.
Si vous souhaitez le coder vous-même, voir ci-dessous:
Une solution plus complète serait de placer les éléments suivants dans votre répertoire
lib/
ouconfig/initializers/
.L'avantage est que vous pouvez configurer le formateur pour qu'il préfixe automatiquement les horodatages ou la gravité aux journaux. Ceci est accessible de n'importe où dans Rails et semble plus net en utilisant le modèle singleton.
la source
#{$$}
pour?Une option décente qui fonctionne pour moi consiste simplement à ajouter une classe assez simple à votre
app/models
dossier, telle queapp/models/my_log.rb
puis dans votre contrôleur, ou vraiment presque partout où vous pouvez référencer la classe d'un modèle à partir de votre application de rails, c'est-à-dire partout où vous pouvez faire
Post.create(:title => "Hello world", :contents => "Lorum ipsum");
ou quelque chose de similaire, vous pouvez vous connecter à votre fichier personnalisé comme celui-cila source
Définissez une classe de journalisation dans (par exemple) app / models / special_log.rb:
initialisez le logger dans (disons) config / initializers / special_log.rb:
N'importe où dans votre application, vous pouvez vous connecter avec:
la source
Voici mon enregistreur personnalisé:
la source
la source
Je suggérerais d'utiliser la gemme Log4r pour la journalisation personnalisée. Citant la description de sa page:
la source
la source
Le framework Logging, avec son nom trompeusement simple, a la sophistication dont vous rêvez!
Suivez les instructions très courtes des rails de journalisation pour commencer à filtrer le bruit, à recevoir des alertes et à choisir la sortie d'une manière fine et de haut niveau.
Tapotez-vous dans le dos lorsque vous avez terminé. Journal de roulement, tous les jours. Ça vaut le coup pour ça seul.
la source