開発環境構築
XAMPP:
ApacheFriends XAMPP Version 5.6.15
XAMPP Control Panel Version 3.2.1
PHP:PHP 5.6.15 + PEAR
Log4php:apache-log4php-2.3.0
Composer:Composer version 1.6.2 2018-01-05 15:28:41
CakePHP:CakePHP 3.5
IDE:Eclipse Luna SR2 (4.4.2)
XAMPPインストール
(省略)
Composer インストール
Composer ダウンロード
Windows Installer - Composer-Setup.exe
インストール注意点
1.パスが設定できるように、開発モードをチェックしてください。
- Developer mode
2.インストール先がローカルXAMPPのphp.exeと同じのパスに指定ください。
Composerインストール先:C:\xampp\php
3.PHPコマンドラインを使えるように、ローカルXAMPPのphp.exeを設定ください
PHPコマンドライン:C:\xampp\php\php.exe
4.動作確認
C:\xampp\phpの配下に以下三つのファイルがあることを確認してください。
CMDを起動して、以下のコマンドを実施してみてください。
cd C:\xampp\php
composer -V
cakePHPのプロジェクトAppの作成
composerで既存のパッケージから新規作成
composerで以下のコマンドを実施して、既存のパッケージからローカルに新しいプロジェクトAppを作成します。
格納先:C:\xampp\htdocs\App
cd C:\xampp\php
php composer.phar create-project --prefer-dist cakephp/app C:\xampp\htdocs\App
eclipseにインポート
eclipseを起動して、プロジェクトAppをインポートします。
注意点1:eclipseインポートエラー
「インポートするプロジェクトが見つかりません」というeclipseエラーが出るときは、以下の.projectファイルをC:\xampp\htdocs\Appの直下に置いて、インポート作業をやり直してください。
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>App</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
</buildSpec>
<natures>
</natures>
</projectDescription>
注意点2:PHPサポート機能
PHP のコード補完がうまく効き、宣言/定義ジャンプができるように、PHPサポート機能を追加しましょう。
プロジェクトを選択しコンテキストメニューを表示(右クリック)-[構成]-[PHPサポートの追加]
プロジェクトAppの環境配置
Apache設定
C:\xampp\apache\conf\httpd.confに以下の設定を追加して、Apacheを再起動ください。
# App
Alias /App "C:/xampp/htdocs/App"
<Directory "C:/xampp/htdocs/App">
order deny,allow
Allow from all
Require all granted
</Directory>
log4phpパーケージ導入
log4phpインストール
Apache公式サイトからlog4phpのzipをダウンロードして、解凍してからプロジェクトにインストールします。
Apache公式サイト:
Apache log4PHPダウンロードソース:
apache-log4php-2.3.0-src.zip解凍したlog4phpフォルダーの格納場所:
C:\xampp\htdocs\App\vendor\apache\log4php
composer設定
# 追加行:"apache/log4php": "2.3.0"
"require": {
"php": ">=5.6",
"cakephp/cakephp": "3.5.*",
"cakephp/migrations": "^1.0",
"cakephp/plugin-installer": "^1.0",
"josegonzalez/dotenv": "2.*",
"mobiledetect/mobiledetectlib": "2.*",
"apache/log4php": "2.3.0"
},
log4php.xml配置
log4php.xmlファイル作成
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logging.apache.org/log4php/">
<appender name="default" class="LoggerAppenderConsole">
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="[%date{Y/m/d H:i:s.u}] [%logger][%-5level] %msg%n" />
</layout>
</appender>
<!-- APP用 -->
<appender name="appAppender" class="LoggerAppenderDailyFile">
<param name="file" value="C:\xampp\htdocs\App\logs\APP.%s.log" />
<param name="datePattern" value="Ymd" />
<layout class="LoggerLayoutPattern">
<param name="conversionPattern" value="[%date{Y/m/d H:i:s.u}] [%logger][%-5level] %msg%n" />
</layout>
</appender>
<!-- APP用 -->
<logger name="APP">
<level value="debug" />
<appender_ref ref="appAppender" />
</logger>
</configuration>
- リリース用ログ出力設定
同じようにリリース用の設定も用意しておきます。
log4php_release.xml
設定内容はほぼ同じですが、ログの保存パスをlinuxの設定と合わせる必要があります。
プロジェクトApp用環境設定
# 下記の環境設定レベル切り替え用のソースコードを追加
/**
* Environment Level:
*
* develop
* release
*
*/
'Env' => 'develop', // ローカル用
/*'Env' => 'release', */ // リリース用
/**
* Configures logging options
*/
'Log' => [
# 下記のAppログ設定のソースコードを追加
'app' => [
'className' => 'App',
'model' => 'LogEntry',
'path' => LOGS,
'file' => 'debug',
'url' => env('LOG_DEBUG_URL', null),
'scopes' => false,
'levels' => ['debug', 'info', 'warn', 'error', ],
],
'debug' => [
'className' => 'Cake\Log\Engine\FileLog',
'path' => LOGS,
'file' => 'debug',
'url' => env('LOG_DEBUG_URL', null),
'scopes' => false,
'levels' => ['notice', 'info', 'debug'],
],
'error' => [
'className' => 'Cake\Log\Engine\FileLog',
'path' => LOGS,
'file' => 'error',
'url' => env('LOG_ERROR_URL', null),
'scopes' => false,
'levels' => ['warning', 'error', 'critical', 'alert', 'emergency'],
],
// To enable this dedicated query log, you need set your datasource's log flag to true
'queries' => [
'className' => 'Cake\Log\Engine\FileLog',
'path' => LOGS,
'file' => 'queries',
'url' => env('LOG_QUERIES_URL', null),
'scopes' => ['queriesLog'],
],
],
独自ログクラスAppLog.php
cakePHPでは、app.phpに設定あるLogクラスはデフォルトでCake\Log\Engine\FileLogを使ってログ出力するようになっています。
上記app.phpにはdebug
,error
,queries
のデフォルト設定があり、ログレベルも既に配置され、便利なので、それをそのまま使ってもいいです。
どうしても、独自のlogクラスを作りたいとしたら、事前に「XxxxLog.php」を作って、src\Log\Engine\
の直下に「XxxxLog.php」を配置しなければならなりません。なぜなら、cakePHPはカスタマイズのログ仕組みを読み込み手段は、黙然にsrc\Log\Engine\
の直下にXxxxLog.php
があるかをチェックしてカスタマイズログクラスを読み込んで使うようになっています。
というのは、app.phpのログclassNameは必ず「Xxxx」にセットしてください。
そうじゃないと、cakePHPさんが見つからなくて、エラーで怒られるのです。
独自のログクラスを作るときに、ちゃんとルールを守りましょう。
例え、自分が「AppLog.php」を作りました。
そして、src\Log\Engine\
の直下に配置しています。
src\Log\Engine\AppLog.php
app.phpにログclassNameを設定するとは、
'className' => 'App',
という書き方です。
log4php.xml配置の読み込み
// app.phpを呼ぶ処理(既存のまま)
try {
Configure::config('default', new PhpConfig());
Configure::load('app', 'default', false);
} catch (\Exception $e) {
exit($e->getMessage() . "\n");
}
# 下記のソースコードを追加
// log4phpを格納した場所(C:\xampp\htdocs\App\vendor\apache\log4php)
require(ROOT . DS . 'vendor' . DS . 'apache' . DS . 'log4php' . DS . 'Logger.php');
try {
$env = Configure::read('Env');
if ($env === 'release') {
Logger::configure ( ROOT . DS . 'config' . DS . 'log4php_release.xml' );
} else {
Logger::configure ( ROOT . DS . 'config' . DS . 'log4php_develop.xml' );
}
} catch (\Exception $e) {
die($e->getMessage() . "\n");
}
ログ出力の動作確認
use Logger;
public function index()
{
// getLoggerにlog4php.xmlに定義したlogger nameをセットする
$logger = Logger::getLogger('APP');
$logger->info( 'ログ確認' );
$logger->debug( 'ログ確認' );
$logger->error( 'ログ確認' );
$logger->warn( 'ログ確認' );
}
- ログ出力ファイル確認
[2018/02/28 13:59:57.427] [APP][INFO ] ログ確認
[2018/02/28 13:59:57.427] [APP][DEBUG] ログ確認
[2018/02/28 13:59:57.427] [APP][ERROR] ログ確認
[2018/02/28 13:59:57.427] [APP][WARN ] ログ確認
以上、何があれば、どうぞお気軽にご指摘ください。
参考
Windows Installer - Composer-Setup.exe
CakePHP 3.5 Red Velvet Cookbook
---I Love PHP (。・ω・。)ノ♡