3

Joomla! の拡張機能を開発しています。現時点では、3.0 互換にしようとしています - 3.0 と同様に、ロギングが少し変更されました (*)。この関連する質問 からの回答に基づいて、現在のコードは次のようになります。

JLog::addLogger(array(
    'text_file' => 'plg_system_myplg.log.php'
)); 
JLog::add('blah blah log msg');

問題は、ログがユーザーに表示されるメッセージにも移動することです-これを防ぎたいのですが、ログメッセージのみをログファイルに移動したいのです。JLog::add3番目の(オプションの)パラメータとして取る「カテゴリ」に関係していると思いますが、そこに何を渡すかわかりませんか?

メッセージを非表示にする方法を誰かに教えてもらえますか? または、カテゴリが正しいかどうか、どの値を使用する必要があるか教えてもらえますか?

ありがとう!

(*) 実は今まで集めた限りでは1.7で既に変わっていたのですがJLog::getInstance(...)、2.5から3.0では、戻り時にaddEntryを呼び出す古いメソッドが削除されたようです。

編集:私は今方法を見つけたと思います。使用:

JLog::addLogger(array(
    'text_file' => 'plg_system_myplg.log.php',
    JLog::ALL,
    'myplg'
)); 

JLog::add('blah blah log msg', JLog::INFO, 'myplg');

すべてのログ エントリはログ ファイルにのみ記録されます (ユーザーに表示されるメッセージには記録されません)。ただし、非推奨の警告もいくつか表示されます。1 つは私のコードに関するものですが、関連のない警告もいくつかあります。

WARNING deprecated  JAccess::getActions is deprecated. Use JAccess::getActionsFromFile or JAcces::getActionsFromData instead.
WARNING deprecated  JSubMenuHelper::getEntries() is deprecated. Use JHtmlSidebar::getEntries() instead.
WARNING deprecated  JSubMenuHelper::getFilters() is deprecated. Use JHtmlSidebar::getFilters() instead.
WARNING deprecated  JSubMenuHelper::getAction() is deprecated. Use JHtmlSidebar::getAction() instead.

それらをどうすればよいかわからない - 私のログファイルに表示されるのはなぜですか?

4

5 に答える 5

0

使用する

 new JException('Something happened');

これはデバッグ ログに追加されるだけで、何も表示されません。

于 2013-02-03T12:29:14.890 に答える
0

私は答えを見つけました..このスクリプトがあなたに理解してくれることを願っています..私はすでに関数として構築しました。このコードは joomla 3 で動作します。joomla 2 で動作することを願っています

<?php 
function logWrite($level, $values, $file='%s.php',$path='',$showOnTop=0,
$option='',$component=''){
/****
jlog Joomla 3.4
created by:gundambison (2015.04.26). 
THX: hbit@stackoverflow
****/
    jimport('joomla.log.log'); 
    $level=strtoupper($level);  
//You can change this com_name
    $component= $component==''? 'com_gundambison': $component;
    $date= date("Ymd");
    $filename= sprintf($file, $date);
    $format= $option=='' ?"{TIME}\t{CLIENTIP}\t{CATEGORY}\t{MESSAGE}": $option;

// create options and text
    $txt = is_array($values)? json_encode($values): $values;
    $options = array('text_file' => $filename,'text_entry_format'=>$format );
    $options['text_file_path']=$path==''?'logs': $path; 
    JLog::addLogger ($options);
/*
if you want the error to show in your page. just see the different 
*/  
    if($showOnTop==1){
        JLog::add("$txt");
    }
    else{ 
        JLog::add("$level\t$txt",$level,$component);
    }
}
于 2015-04-26T15:27:00.670 に答える
0

Joomla 3.0 ではデフォルトのロガーが有効になっていないようです。Joomla 3.0.3 でも同じです。デフォルトでは、ロギングをオンにするものはありません - デバッグモードであっても。

于 2013-02-18T13:56:35.440 に答える
0

最後に、無関係なログエントリが表示されるという問題を解決したと思います。

addLogger 関数の API ドキュメントをよく見ると、3 番目のパラメーター は$categories、このログが使用されるカテゴリの配列であることが想定されていることがわかりました。

これは、この記事の執筆時点で最新のhttp://docs.joomla.org/Using_JLogのバージョンと矛盾しており、配列ではなく単一のカテゴリが指定されています。

addLogger次のように、配列を使用するように呼び出しを変更します。

JLog::addLogger(array(
    'text_file' => 'plg_system_myplg.log.php',
    JLog::ALL,
    array('myplg')
)); 

そして、これで問題が解決することを願っています。

編集:残念ながら、これでも問題は解決しません-無関係なエントリがまだあります:(。

于 2014-03-07T00:16:20.310 に答える