• ベストアンサー

Perl エラーログを指定の場所に出力する場合

以下のよーに指定すればエラーログの場所を指定する事ができますが、 # エラーログ BEGIN{ open ( STDERR, ">>./log/err_log/err.txt" ); } たとえば変数にファイル名を入れて指定する場合は、 $err_log = "./log/err_log/err.txt"; BEGIN{ open ( STDERR, ">>$err_log" ); } とするとエラーが出てしまいます。変数に入っているものを指定するにはどうすればいいでしょうか?

  • Perl
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

BEGINブロックは一番最初に実行されます。 この場合、$err_log = "./log/err_log/err.txt"; より前です。 なので、open時の$err_logは空です。 $err_log=をBEGINブロックに入れるか、openをBEGINブロックから出すか、になります。

nakisan2011_12
質問者

お礼

ありがとうございます。 >BEGINブロックは一番最初に実行されます。 これで理解しました!

関連するQ&A

  • Perlでエラーログに日時をつける

    BEGIN { open ( STDERR, '>>', '.err.txt' ); } # エラーログ出力する とやると、エラーログをerr.txt に出力する事ができますが、このエラーメッセージの先頭に自動的に日時をつける方法はないでしょうか?

    • ベストアンサー
    • Perl
  • fprintfで出力するファイルのパス指定について

    cで以下のコードを書いています。 file.txtを任意の場所に作りたいのですが どうすればいいのでしょうか。 fopen("c:\file.txt", "r"))と書くとエラーになって しまいました。 void main(void) { FILE *fp; if ((fp = fopen("file.txt", "r")) == NULL) { fprintf ( stderr, "err\n" ); exit (2); } fprintf(fp,"%s\n",a);; fclose(fp); }

  • 標準出力と標準エラー出力を変数にセットしたいです。

    始めたばかりの初心者の為、変な質問でしたら申し訳ありません。 標準出力と標準出力を別々の変数にセットしたいのですが、そのやり方が分からず困っています。 やりたいことは、 コマンド(diffやcatなどの)実行結果の標準出力と標準エラー出力を それぞれ「任意の文字_受取パラメータの値」にセットすることをしたいです。 下記は、1回ファイルに出力して、それを読んで変数にセットするように記述したものです。 ※記述間違っていたらすみません。 ファイルに書かなくても、パイプやその他コマンドなどで出来る方法はないでしょうか? ex) test.sh 1.txt 2.txt TEST01 で実行 #!/bin/sh parm1 = $1 parm2 = $2 parm3 = $3 diff "${parm1}" "${parm2}" > test.log 2> err.log eval w_stdout_${parm3}=¥`cat test.log¥` eval w_stderr_${parm3}=¥`cat err.log¥` eval echo "stdout:¥"¥{w_stdout_${parm3}}¥"" eval echo "stderr:¥"¥{w_stderr_${parm3}}¥"" ※実行した結果 stdout:diff結果 stderr:空白 お手数ですが、何卒宜しくお願い致します。

  • phpエラーログの置き場所

    いままでエラーログファイルを取っていなかったのですが、やはり記録させたいなと思いました。 Apacheのlogsディレクトリに置こうかと思ったのですが、permissionの関係でできないようです。 phpのエラーログ置き場としてよくある場所はありますでしょうか。また、みなさまどこに保存していらっしゃいますでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 標準出力/標準エラー出力を時系列にファイルへ

    画面への文字出力が、標準出力(stdout)と標準エラー出力(stderr)の 両方もつような、コンソールアプリ(exe形式)のツールを動作させたときに、 画面上には、 stdout1 STDERR1 stdout2 STDERR2 stdout3 STDERR3 のような順番で処理順にメッセージが出るのですが、 これをファイルに落とそうとして、  C:\>hoge.exe 1> log.txt 2>1& とすると、log.txtの中身が、 C:\>type log.txt STDERR1 STDERR2 STDERR3 stdout1 stdout2 stdout3 のような標準エラー出力が先に吐き出される順番になってしまっています。 これを、exe実行前に、MS-DOSとして何らかの設定を行うことで、 ファイルに落とした時も、出力された文字が時系列に保存されるように する方法はあるでしょうか? よろしくお願いします。

  • 標準出力と標準エラー出力を時系列にファイルへ

    例として、perlなどで、(test.plとします)  print "stdout1\n";  print STDERR "STDERR1\n";  print "stdout2\n";  print STDERR "STDERR2\n";  print "stdout3\n";  print STDERR "STDERR3\n"; このように、標準出力と、標準エラー出力が混在した状態の処理があった場合、 コマンドプロンプト(Windows2000)にて、 C:\>test.pl とすると、 stdout1 STDERR1 stdout2 STDERR2 stdout3 STDERR3 のように時系列に出力されますが、これをログファイルに取ろうとして、 C:\>test.pl 1>log.txt 2>&1 とすると、 C:\>cat log.txt STDERR1 STDERR2 STDERR3 stdout1 stdout2 stdout3 のように、標準エラー出力が先に吐き出されてしまいます。 これを画面出力時と同様に時系列で取れるようにしたいのですが、どのようにすれば良いでしょうか? 単純なことで困っています。よろしくお願いします。

  • Perlプログラミングについて

    open(IN,"<○○○.txt"); open(OUT,">○○○.html");    :    処理    : というように、○○○.txtは既存のファイルで、 処理を行ったあとの出力をhtml形式にさせたいです。 ○○○.txtというのはデータベース上のファイル名から取り出してくるのを想定しています。ですので、○○○.txtは取り出された後、変数に入れるなどして、 その変数がopen(IN,"<変数");というようにしてファイルを読み込むようにしたいと考えています。 出力するファイルは固定(例えばkekka.html)にして、データベースへ要求のあったtxtファイルは処理後、すべてkekka.htmlに出力させます。 これらの処理をサーバ上ですると考えているのですが、まだまだ知識がないため、何か不備や間違いがあればご指摘いただきたいと思っています。 また、サーバの処理後、そのkekka.htmlを動的にクライアント側で表示させることは可能でしょうか。 わかりづらい質問で申し訳ありませんが、アドバイスなどよろしくお願いします。

    • ベストアンサー
    • Perl
  • psqlでエラーログをとりたい

    こんにちは、honiyonです。  WindowsXP + Cygwin + PostgreSQL  という環境で使用しています。  psqlは   http://www.interwiz.koganei.tokyo.jp/software/PostgreSQL/windows.html  にあるWindows版を使用しています。  この環境で、ファイルに保存してあるSQLを一括処理した場合に発生するエラーをしる為に、実行結果をファイルに保存したいと思い、  psql -h localhost [DB名] < sqllist.txt > log.txt  のように実行してみました。  確かにログは作成されましたが、正常時のみで肝心のエラーメッセージが省かれて保存されます。  そこで、  psql -f sqllist.txt -o log.txt -h localhost [DB名]  としましたが、変化ありませんでした。  もしエラーメッセージを保存する方法がありましたら、是非ご教授ください(..  宜しくお願いします(..

  • Perl出力をUTF-8に指定する方法

    Perlの出力を UTF-8にするため、 binmode FILE, ':utf8'; を指定したり、 open (FILE, ">:encoding(UTF-8)","$file" ) || die "Error opening $file: $!"; でopenしてみたりしたのですが、それぞれ unknown discipline ':utf8' unknown open() mode: というエラーが出てしまいます。Perlは v.5.6.1でWindows XP(英語版)ですが、UTF-8を指定することはできないのでしょうか?

    • ベストアンサー
    • Perl
  • MS-DOSでのエラーログ保存について

    はじめまして、現在DOSでサーバーのデータバックアップ用のバッチファイルを作成し タスクマネージャーで動かそうとしています。 下記の内容でとりあえずは組んでいるのですが、エラーログを保存する方法を 色々調べましたけど見つかりませんでした。 @echo 開始日付、開始時刻表示 @echo %date% %time% >> d:\BackupLOG\サーバー名Copy.log @echo サーバー名のバックアップを開始 xcopy i:\\サーバー名\*.* f:\\保存先\ /EXCLUDE:D:\BackupBAT\un-mlist.txt /e /h /k /c /y /r >> d:\BackupLOG\サーバー名Copy.log @echo 終了日付、終了時刻表示 @echo %date% %time% >> d:\BackupLOG\サーバー名Copy.log 一応バックアップ自体は問題なく動き、バックアップを取ったファイル名と時間は ログに残す事ができましたがエラーが発生した際に備えてエラーログを別に取りたいと 考えています。 あと、上記の設定ではコピー中のファイル名がDOS画面で表示されなくなって しまいました。 どなたか、ご存知な方がいらっしゃいましたらご助力下さい。 よろしくお願いします。