Question
Je suis en cours d'exécution d'une application par sinatra RACK.
Pour quel fichier ne soit enregistré l'activité? Aussi comment puis-je définir le chemin du fichier journal?
La solution
Cela dépend. De nombreux développeurs définissent leur fichier journal app app / servername.log ou juste pour le chemin actuel où l'application du rack est chargé.
Oui, vous pouvez changer son chemin.
En général, vous obtenez un fichier config.ru avec quelque chose comme:
log = File.new("sinatra.log", "a+") $stdout.reopen(log) $stderr.reopen(log)
et / ou
configure do LOGGER = Logger.new("sinatra.log") enable :logging, :dump_errors set :raise_errors, true enddans ce cas
le fichier journal se trouve sous appdir / sinatra.log. Mais rappelez-vous ce code peut être n'importe où dans votre application Rack, donc s'il vous plaît chercher « log » dans votre répertoire d'application.
$ cd projectname $ grep -ri 'log' *
vous amuser et poster ici votre config.ru et / ou mainprojectfile.rb.
Autres conseils
La ligne de LOGGER = Logger.new("sinatra.log")
@ include de réponse ci-dessus ne fonctionne pas pour moi.
Cependant, une alternative liste (le long avec quelques explications utiles) ont travaillé pour moi, testé avec rubis 2.5.3 et 2.0.1 sinatra.
Pour plus d'infos, cette alternative est basée sur la structure présentée dans un recette Sinatra .
Les object_id
sont d'abord les mêmes, mais il est préférable d'attribuer à $stderr
. Cela laisse également d'ouvrir pour retourner le flux à l'endroit où il était à l'origine avec STDERR
:
$ irb
>> $stderr.object_id == STDERR.object_id
=> true
Même objet, pour l'instant. Envoyez ailleurs,
>> $stderr = File.open('/tmp/foo', 'w')
=> #<File:/tmp/foo>
>> $stderr.puts "Uh-oh, foo"
=> nil
>> $stderr.flush # if you want to verify its output
=> #<File:/tmp/foo>
>> $stderr.object_id == STDERR.object_id
=> false
$stderr
et STDERR
font référence à des objets différents. STDERR
cours d'eau encore à la borne ici,
>> STDERR.puts "Uh-oh, original STDERR"
Uh-oh, original STDERR
=> nil
Restaurer $stderr
,
>> $stderr = STDERR
=> #<IO:0x106fddb88>
>> $stderr.object_id == STDERR.object_id
=> true
Et nous sommes de retour!