--> -->
#blog2navi() *Kmdのlogviewerに「全てのログを削除する」機能を追加してみた [#bfdb4f76] #ref(screen.png)~ ~ Laravelのlog viewerとして愛用している[[kmd/logviewer:https://packagist.org/packages/kmd/logviewer]]。~ インストール方法は上記リンク先を見て頂ければ簡単です。入れるだけです。~ ~ 画面デザインも[[画像検索:http://www.google.co.jp/search?q=kmd+logviewer+laravel&btnG=%E6%A4%9C%E7%B4%A2&lr=&hl=ja&tbm=isch]]して頂ければ解るとおり、綺麗です。~ そして何と言っても速い!~ 大量のログが溜まっても、ストレス無く開けます。~ ~ このviewer、ログの削除機能が付いているのは良いのですが、現在見ているログしか消せないので、ログが溜まってくると1つ1つ開いて消さなくてはならず、面倒です。~ まあ、古いログなんてlogrotateが勝手に消してくれるから関係ない、って方は良いのですが、気になっちゃう人は気になっちゃいますよね。~ ~ そんなわけで、「全てのログを削除する」機能、付けてみました。~ でも日本語でkmd/logviewer検索しても何も出ないんだよなぁ。誰も使ってないのかな。~ ~ 変更するファイルはたったの5つです(主要なファイルは殆どとも言う)。 ** /src/filters.php [#b1096cbd] filterの中でログファイルリストを作成しているので、削除処理からも使えるようにLogviewer.phpに追い出します。 #code(php,first-line:3){{{ #code(php,3-){{{ use Kmd\Logviewer\Logviewer; Route::filter('logviewer.logs', function () { if (!Lang::has('logviewer::logviewer.sapi')) { App::setLocale('en'); } $app = key(Config::get('logviewer::log_dirs')); View::share('logs', (new Logviewer($app, null, null))->makeLogs(Lang::get('logviewer::logviewer.sapi'))); }); }}} ** src/Kmd/Logviewer/Logviewer.php [#pc65d0b3] 追い出されたひと。 #code(php){{{ /** * Make the all log file list. * * @access public * @param $sapis * @return array */ public function makeLogs($sapis) { $logs = array(); foreach($sapis as $sapi => $human) { $logs[$sapi]['sapi'] = $human; $dirs = Config::get('logviewer::log_dirs'); $files = $orgs = array(); foreach($dirs as $app => $dir) { $files[$app] = glob($dir.'/log-'.$sapi.'*', GLOB_BRACE); $orgs[$app] = $files[$app]; if(is_array($files[$app])) { $files[$app] = array_reverse($files[$app]); foreach($files[$app] as &$file) { $file = preg_replace('/.*(\d{4}-\d{2}-\d{2}).*/', '$1', basename($file)); } } else { $files[$app] = array(); } } $logs[$sapi]['logs'] = $files; $logs[$sapi]['orgs'] = $orgs; } return $logs; } }}} それと、全削除の関数も追加。 #code(php){{{ /** * Delete the all logs. * * @param $sapis * @return bool */ public function delete_all($sapis) { $result = true; foreach($this->makeLogs($sapis) as $type => $files) { if(!empty($files['orgs'])) { foreach($files['orgs'] as $app => $file) { if ( !empty($file) ){ foreach ($file as $f){ if( !File::delete($f) ){ $result = false; } } } } } } return $result; } }}} ** src/lang/en/logviewer.php , src/lang/jp/logviewer.php [#u21bce70] 文言も追加します。英語と日本語。 日本語って「ja」になってるんですが、「jp」ですよね? ディレクトリrenameしました。 #code(php,first-line:5){{{ #code(php,5-){{{ 'delete' => array( 'one' => array( 'modal' => array( 'header' => 'Are you sure?', 'body' => 'Are you sure you want to delete this log?', 'btn' => array( 'no' => 'No', 'yes' => 'Yes', ) ), 'error' => 'There was an error while deleting the log.', 'success' => 'Log deleted successfully!', 'btn' => 'Delete Current Log', ), 'all' => array( 'modal' => array( 'header' => 'Are you sure?', 'body' => 'Are you sure you want to delete ALL logs?', 'btn' => array( 'no' => 'No', 'yes' => 'Yes', ) ), 'error' => 'There was an error while deleting the all logs.', 'success' => 'Logs deleted successfully!', 'btn' => 'Delete ALL Logs', ), ), }}} #code(php,first-line:5){{{ #code(php,5-){{{ 'delete' => array( 'one'=>array( 'modal' => array( 'header' => 'よろしいですか?', 'body' => 'このログを削除してもよろしいですか?', 'btn' => array( 'no' => 'いいえ', 'yes' => 'はい', ) ), 'error' => '削除中にエラーが発生しました。', 'success' => 'ログの削除は成功しました!', 'btn' => '現行のログを削除する', ), 'all'=>array( 'modal' => array( 'header' => 'よろしいですか?', 'body' => '全てのログを削除してもよろしいですか?', 'btn' => array( 'no' => 'いいえ', 'yes' => 'はい', ) ), 'error' => '削除中にエラーが発生しました。', 'success' => 'ログの削除は成功しました!', 'btn' => '全てのログを削除する', ), ), }}} ** src/routes.php [#a2becbc0] 削除処理そのものはroutes.phpで行われています。~ ここに全削除の処理を追加すると共に、文言指定を修正。 #code(php,first-line:66){{{ #code(php,66-){{{ Route::group(array('before' => $filters['before'], 'after' => $filters['after']), function () { Route::get(Config::get('logviewer::base_url').'/{path}/{sapi}/{date}/delete', function ($path, $sapi, $date) { $logviewer = new Logviewer($path, $sapi, $date); if ($logviewer->delete()) { $today = Carbon::today()->format('Y-m-d'); return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$today.'/all') ->with('success', Lang::get('logviewer::logviewer.delete.one.success')); } else { return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$date.'/all') ->with('error', Lang::get('logviewer::logviewer.delete.one.error')); } }); Route::get(Config::get('logviewer::base_url').'/{path}/{sapi}/{date}/delete_all', function ($path, $sapi, $date) { $logviewer = new Logviewer($path, $sapi, $date); if ($logviewer->delete_all(Lang::get('logviewer::logviewer.sapi'))) { $today = Carbon::today()->format('Y-m-d'); return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$today.'/all') ->with('success', Lang::get('logviewer::logviewer.delete.all.success')); } else { return Redirect::to(Config::get('logviewer::base_url').'/'.$path.'/'.$sapi.'/'.$date.'/all') ->with('error', Lang::get('logviewer::logviewer.delete.all.error')); } }); }); }}} ** src/views/viewer.blade.php [#l604b18f] 最後に、全て削除ボタンを追加します。~ ここでも文言の指定を修正します。 #code(php,first-line:44){{{ #code(php,44-){{{ @if ( !$empty ) <div class="pull-right"> {{ HTML::link('#delete_modal', Lang::get('logviewer::logviewer.delete.one.btn'), array('class' => 'btn btn-danger', 'data-toggle' => 'modal', 'data-target' => '#delete_modal')) }} </div> <div class="pull-right"> </div> <div class="pull-right"> {{ HTML::link('#delete_modal_all', Lang::get('logviewer::logviewer.delete.all.btn'), array('class' => 'btn btn-danger', 'data-toggle' => 'modal', 'data-target' => '#delete_modal_all')) }} </div> @endif }}} #code(php,first-line:149){{{ #code(php,149-){{{ <div id="delete_modal" class="modal hide fade"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3>{{ Lang::get('logviewer::logviewer.delete.one.modal.header') }}</h3> </div> <div class="modal-body"> <p>{{ Lang::get('logviewer::logviewer.delete.one.modal.body') }}</p> </div> <div class="modal-footer"> {{ HTML::link($url.'/'.$path.'/'.$sapi_plain.'/'.$date.'/delete', Lang::get('logviewer::logviewer.delete.one.modal.btn.yes'), array('class' => 'btn btn-success')) }} <button class="btn btn-danger" data-dismiss="modal">{{ Lang::get('logviewer::logviewer.delete.one.modal.btn.no') }}</button> </div> </div> <div id="delete_modal_all" class="modal hide fade"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3>{{ Lang::get('logviewer::logviewer.delete.all.modal.header') }}</h3> </div> <div class="modal-body"> <p>{{ Lang::get('logviewer::logviewer.delete.all.modal.body') }}</p> </div> <div class="modal-footer"> {{ HTML::link($url.'/'.$path.'/'.$sapi_plain.'/'.$date.'/delete_all', Lang::get('logviewer::logviewer.delete.all.modal.btn.yes'), array('class' => 'btn btn-success')) }} <button class="btn btn-danger" data-dismiss="modal">{{ Lang::get('logviewer::logviewer.delete.all.modal.btn.no') }}</button> </div> </div> }}} これで快適にlogviewライフを楽しめます;-)~ #htmlinsert(twitterbutton.html) RIGHT:Category: [[[Linux>日記/Category/Linux]]] - 16:13:36 ---- RIGHT:&blog2trackback(); #comment(above) #blog2navi()