2013-07-04 44 views
0

我編寫了以下獲取日誌錯誤的方法。我使用$ _來獲得「錯誤類型」。

sub _log_warning { 
    my $log = Log::Server->new(
     base_dir => 
      &config->current->{'log_reader'}->{'base_dir'}, 
     pattern => &config->current->{'log_reader'}->{'pattern'}, 
    ); 
    $log->infof("Could not register to DB. Got $_"); 
} 

因爲我看到$ _用於獲取產生的錯誤類型。

use Try::Tiny; 
try { _log_to_database(); } 
catch { 
    _log_warning(); 
}; 

這是正確的syntatically: 我在這種情況下使用呢?我期待_log_warning();做一個錯誤日誌,$ _應該說出錯的類型。但是,也許我沒有使用$ _?

更新:

當我試圖產生一個錯誤,要積極的方法,我得到:

2013-07-04T11:15:56 [INFO] Could not register to DB. Got ã<81><9d>ã<81>®ã<82><88>ã<81>  <86>ã<81>ªã<83><95>ã<82>¡ã<82>¤ã<83>«ã<82><84>ã<83><87>ã<82>£ã<83>¬ã<82>¯ã<83><88>ã<83>>> ªã<81>¯ã<81><82>ã<82><8a>ã<81>¾ã<81><9b>ã<82><93>: /var/log/app.error.log.%Y%m%d at script.pl line 36.\n at script.pl line 113 

:(

@ikegami SOS

+1

你期望它做什麼?它是這樣做的嗎? – Flimzy

+0

@Flimzy我希望$ _捕獲錯誤的類型。語法錯誤等。? – ado

回答

1

所以根據Try::Tiny文件:

catch塊內部捕獲的錯誤存儲在$ _中,而之前的$ @值仍然可用。

所以這個模塊將設置$_到被捕獲的錯誤,所以你的使用看起來是正確的。這很有趣blog post邏輯背後的設計。

+0

謝謝!但我不解釋自己爲什麼在「a <81><9d>ã<81>®ã<82><88>ã<81>」的消息出現了 – ado

+0

@adriancdperu'_log_to_database()'是產生一個錯誤,該消息來自那裏,所以你需要追查來源更好地瞭解錯誤。 –

+0

是錯誤捕獲過程是好的。在stdout中,它給了我日文中的錯誤信息「文件不存在」。所以,它是一個相關的問題。不知何故,當我把錯誤記錄在一個文件夾中時,它不會識別日文,而是給我奇怪的符號。 – ado