• ベストアンサー

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

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

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

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

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

それでエラーログが保存されるのは、通常、エラーメッセージは標準エラー出力STDERRに出力するようになっていて、それを「画面」からファイルに切り替えているからです。 扱いは通常のファイル出力と同じなので、print STDERR ~ 等として日付でもなんでも出力することが可能です。 # もしかして、理屈もわからずに、呪文のように使ってませんか?

nakisan2011_12
質問者

お礼

ありがとうございます。 BEGIN { open ( STDERR, '>>', '.err.txt' ); } を実行すると print STDERR はtxtに記録されるので、大変便利です。 プログラムのミスによる、エラーもファイルに書き込まれます。 ただプログラムのミスによるエラーがいつ何時何分に起こったのかをしりたかったので、プログラムミスが発生した場合に日時を強制的に付け加える方法があればなー と思ったのでした。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

エラーログの出し方による, かな.

関連するQ&A

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

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

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

    画面への文字出力が、標準出力(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として何らかの設定を行うことで、 ファイルに落とした時も、出力された文字が時系列に保存されるように する方法はあるでしょうか? よろしくお願いします。

  • エラーログの出力方法

    PHPでは vi php.ini ------------------------------ error_log = /var/log/php_error.log ------------------------------ により、PHPエラーログを出力できますが、 Javaではエラーログを確認するのにどのような方法がありますでしょうか? ご存知の方、宜しくお願いします。

  • perlでASCII制御文字(キャレット記法)表示

    (10進数で)0から31までに相当する、キャレット記法のASCII制御文字(\0,^A,^B,^C,^D,^E,^F,^G,^H,^I,\n,^K,\f,\r,^N,^O,^P,^Q,^R,^S,^T,^U,^V,^W,^X,^Y,^Z,^[,^\,^],^^,^_)をシェルスクリプトを使わずにperlプログラムで導出するプログラムはどうやって書けば良いのでしょうか? (以下のように、エラーを利用した回りくどい方法で考えましたがもっと簡単な方法はありませんか?) open TEMP,">& STDERR"; open STDERR,"> ascii.txt"; for (0..31){ printf ("%c",chr($_)); } open STDERR,">& TEMP"; close TEMP; open IN,"< ascii.txt"; while (<IN>){ /"(.{2})"/; print "$1,"; } close IN;

    • ベストアンサー
    • Perl
  • 日付日時をファイルに出力するには

    お世話になります。 DIM Today as date Today = Now Open data.txt For Append As #1 Print #1, Today Close では「data.txt」に日付日時が出力されないのはどこが間違いか教えて下さい。

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

    始めたばかりの初心者の為、変な質問でしたら申し訳ありません。 標準出力と標準出力を別々の変数にセットしたいのですが、そのやり方が分からず困っています。 やりたいことは、 コマンド(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:空白 お手数ですが、何卒宜しくお願い致します。

  • 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などで、(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からsendmailを使う

    現在、mod_perlを使ってサイトを構築しているのですが、その中で、sendmailを使ってメールを送信している処理が遅く困っています。 その処理が遅いため、画面へのHTML出力が遅くなっています。(HTML出力処理は、メール送信処理よりさきにやっているのですが・・) 下記は、ソースの該当部分です。 直接、sendmailに渡しているのですが、 この処理がいけないのでしょうか? 何か改善方法があるようであれば教えてください。 ちなみに、通常のCGIだとforkで、別プロセスを立てて そのプロセスにメール送信をさせて、主プロセスは、HTML出力をさせることはできると思うのですが。 プロセスが常駐しているmod_perlでは、有効な手なのでしょうか。 -------------------------------------- open(SENDMAIL,"|/usr/lib/sendmail -t") or $err = 1; if ($err == 0) { print SENDMAIL $mail_body; close(SENDMAIL); $err_msg = "メール送信正常に処理しました。\n"; } else { $err_msg = "メール送信エラー:ticket_cd:$$ref{ticket_cd}\n"; } --------------------------------------

    • ベストアンサー
    • Perl
  • perl 出力について

    Win98SEのDOS窓で、たとえば perl -w a.cgi というふうにするとエラーなどがDOS窓に出力されると思いますが、それがたくさんあるとスクロールして上のほうが見れないんですがどうすれば見れるのでしょうか? >a.txt などと付け加えると処理結果(?)はファイルに出力されるのですが、エラーのメッセージなどはファイルに出力されません、DOS窓に表示されたままです。 よろしくお願いします。

    • ベストアンサー
    • Perl

専門家に質問してみよう