مكتبة التسجيل لـ PHP. الإخراج بتنسيق JSON
هذه المكتبة مخصصة بشكل أساسي للاستخدام في تطبيقات الويب.
composer require nekonomokochan/php-json-logger
<?php
use Nekonomokochan PhpJsonLogger LoggerBuilder ;
$ context = [
' title ' => ' Test ' ,
' price ' => 4000 ,
' list ' => [ 1 , 2 , 3 ],
' user ' => [
' id ' => 100 ,
' name ' => ' keitakn ' ,
],
];
$ loggerBuilder = new LoggerBuilder ();
$ logger = $ loggerBuilder -> build ();
$ logger -> info ( ' ? ' , $ context );
ويتم الإخراج على النحو التالي.
{
"log_level" : " INFO " ,
"message" : " ? " ,
"channel" : " PhpJsonLogger " ,
"trace_id" : " 35b627ce-55e0-4729-9da0-fbda2a7d817d " ,
"file" : " / home / vagrant / php-json-logger / tests / LoggerTest.php " ,
"line" : 42 ,
"context" : {
"title" : " Test " ,
"price" : 4000 ,
"list" : [
1 ,
2 ,
3
],
"user" : {
"id" : 100 ,
"name" : " keitakn "
}
},
"remote_ip_address" : " 127.0.0.1 " ,
"server_ip_address" : " 127.0.0.1 " ,
"user_agent" : " unknown " ,
"datetime" : " 2018-06-04 17:21:03.631409 " ,
"timezone" : " Asia / Tokyo " ,
"process_time" : 631.50811195373535
}
وحدة process_time
هي مللي ثانية (ملي ثانية).
مسار ملف الإخراج الافتراضي هو /tmp/php-json-logger-yyyy-mm-dd.log
.
إذا كنت تريد تغيير مسار ملف الإخراج، فيرجى ضبط مسار ملف الإخراج على فئة المنشئ.
<?php
use Nekonomokochan PhpJsonLogger LoggerBuilder ;
$ fileName = ' /tmp/test-php-json-logger.log ' ;
$ context = [
' cat ' => ' ? ' ,
' dog ' => ' ? ' ,
' rabbit ' => ' ? ' ,
];
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setFileName ( $ fileName );
$ logger = $ loggerBuilder -> build ();
$ logger -> info ( ' testSetLogFileName ' , $ context );
مسار ملف الإخراج هو /tmp/test-php-json-logger-yyyy-mm-dd.log
.
ويتم الإخراج على النحو التالي.
{
"log_level" : " INFO " ,
"message" : " testSetLogFileName " ,
"channel" : " PhpJsonLogger " ,
"trace_id" : " 20f39cdb-dbd8-470c-babd-093a2974d169 " ,
"file" : " / home / vagrant / php-json-logger / tests / LoggerTest.php " ,
"line" : 263 ,
"context" : {
"cat" : " ? " ,
"dog" : " ? " ,
"rabbit" : " ? "
},
"remote_ip_address" : " 127.0.0.1 " ,
"server_ip_address" : " 127.0.0.1 " ,
"user_agent" : " unknown " ,
"datetime" : " 2018-06-05 11:28:03.214995 " ,
"timezone" : " Asia / Tokyo " ,
"process_time" : 215.09790420532227
}
trace_id
يمكن تعيين أي قيمة لـ trace_id
.
سيساعدك هذا عند البحث عن السجلات التي تريدها.
<?php
use Nekonomokochan PhpJsonLogger LoggerBuilder ;
$ context = [
' name ' => ' keitakn ' ,
];
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setTraceId ( ' MyTraceID ' );
$ logger = $ loggerBuilder -> build ();
$ logger -> info ( ' testSetTraceIdIsOutput ' , $ context );
ويتم الإخراج على النحو التالي.
{
"log_level" : " INFO " ,
"message" : " testSetTraceIdIsOutput " ,
"channel" : " PhpJsonLogger " ,
"trace_id" : " MyTraceID " ,
"file" : " / home / vagrant / php-json-logger / tests / LoggerTest.php " ,
"line" : 214 ,
"context" : {
"name" : " keitakn "
},
"remote_ip_address" : " 127.0.0.1 " ,
"server_ip_address" : " 127.0.0.1 " ,
"user_agent" : " unknown " ,
"datetime" : " 2018-06-05 11:36:02.394269 " ,
"timezone" : " Asia / Tokyo " ,
"process_time" : 394.35911178588867
}
الرجاء استخدام NekonomokochanPhpJsonLoggerLoggerBuilder::setLogLevel()
.
على سبيل المثال، لا يقوم التعليمة البرمجية التالية بإخراج السجلات.
لأنه تم ضبط المستوى على CRITICAL
.
<?php
use Nekonomokochan PhpJsonLogger LoggerBuilder ;
$ context = [
' cat ' => ' ? ' ,
' dog ' => ' ? ' ,
' rabbit ' => ' ? ' ,
];
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setLogLevel (LoggerBuilder:: CRITICAL );
$ logger = $ loggerBuilder -> build ();
$ logger -> info ( ' testSetLogLevel ' , $ context );
يمكنك تعيين القيم التالية لـ logLevel
.
هذه هي نفس logLevel
المحدد في Monolog.
القناة الافتراضية هي PhpJsonLogger
.
إذا كنت تريد تغيير القناة، يمكنك تغييرها بالكود التالي.
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setChannel ( ' My Favorite Animals ' );
على سبيل المثال، الإخراج على النحو التالي.
{
"log_level" : " INFO " ,
"message" : " testCanSetChannel " ,
"channel" : " My Favorite Animals " ,
"trace_id" : " 4b8aa070-a533-4376-9bf5-270c8fcc6d87 " ,
"file" : " / home / vagrant / php-json-logger / tests / Logger / LoggerTest.php " ,
"line" : 347 ,
"context" : {
"animals" : " ????? "
},
"remote_ip_address" : " 127.0.0.1 " ,
"server_ip_address" : " 127.0.0.1 " ,
"user_agent" : " unknown " ,
"datetime" : " 2018-06-07 17:56:48.538117 " ,
"timezone" : " Asia / Tokyo " ,
"process_time" : 538.48695755004883
}
هذا هو الإعداد الافتراضي لحفظ السجلات لمدة 7 أيام.
إذا كنت تريد تغيير تاريخ تدوير السجل، فيمكنك تغييره باستخدام الكود التالي.
يقوم التعليمة البرمجية التالية بتعيين فترة الاحتفاظ بالسجل إلى يومين.
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setMaxFiles ( 2 );
NekonomokochanPhpJsonLoggerJsonFormatter
يمكنك إنشاء MonologLogger
الخاص بك باستخدام NekonomokochanPhpJsonLoggerJsonFormatter
فقط.
هذه الطريقة مفيدة عندما تحتاج إلى MonologLogger
في إطار عمل تطبيق الويب (على سبيل المثال Laravel).
ما يلي هو نموذج التعليمات البرمجية.
<?php
use Monolog Logger ;
use Monolog Handler RotatingFileHandler ;
use Monolog Processor IntrospectionProcessor ;
use Nekonomokochan PhpJsonLogger JsonFormatter ;
$ logFileName = ' /tmp/extended-monolog-test.log ' ;
// create extendedMonolog Instance
$ formatter = new JsonFormatter ();
$ rotating = new RotatingFileHandler (
$ logFileName ,
7 ,
Logger:: INFO
);
$ rotating -> setFormatter ( $ formatter );
$ introspection = new IntrospectionProcessor (
Logger:: INFO ,
[ ' Nekonomokochan \ PhpJsonLogger \' ],
0
);
$ extraRecords = function ( $ record ) {
$ record [ ' extra ' ][ ' trace_id ' ] = ' ExtendedMonologTestTraceId ' ;
$ record [ ' extra ' ][ ' created_time ' ] = microtime ( true );
return $ record ;
};
$ extendedMonolog = new Logger (
' ExtendedMonolog ' ,
[ $ rotating ],
[ $ introspection , $ extraRecords ]
);
// output info log
$ context = [
' cat ' => ' ? ' ,
' dog ' => ' ? ' ,
' rabbit ' => ' ? ' ,
];
$ extendedMonolog -> info ( ' outputInfoLogTest ' , $ context );
يتم إخراجه إلى extended-monolog-test-yyyy-mm-dd.log
على النحو التالي
{
"log_level" : " INFO " ,
"message" : " outputInfoLogTest " ,
"channel" : " ExtendedMonolog " ,
"trace_id" : " ExtendedMonologTestTraceId " ,
"file" : " / home / vagrant / php-json-logger / tests / ExtendedMonologTest.php " ,
"line" : 85 ,
"context" : {
"cat" : " ? " ,
"dog" : " ? " ,
"rabbit" : " ? "
},
"remote_ip_address" : " 127.0.0.1 " ,
"server_ip_address" : " 127.0.0.1 " ,
"user_agent" : " unknown " ,
"datetime" : " 2018-06-06 17:14:26.042013 " ,
"timezone" : " Asia / Tokyo " ,
"process_time" : 0.1678466796875
}
التعليمة البرمجية التالية ضرورية لإخراج trace_id
و process_time
.
<?php
$ extraRecords = function ( $ record ) {
$ record [ ' extra ' ][ ' trace_id ' ] = ' ExtendedMonologTestTraceId ' ;
$ record [ ' extra ' ][ ' created_time ' ] = microtime ( true );
return $ record ;
};
الكود أدناه هو الكود الضروري لعرض تتبع المكدس باستخدام JSON بشكل طبيعي.
<?php
$ introspection = new IntrospectionProcessor (
Logger:: INFO ,
[ ' Nekonomokochan \ PhpJsonLogger \' ],
0
);
لإخراج تتبع المكدس إلى السجل، قم بتنفيذ التعليمة البرمجية التالية.
<?php
$ exception = new Exception ( ' ExtendedMonologTest.outputErrorLog ' , 500 );
$ context = [
' cat ' => ' ?(=^・^=)? ' ,
' dog ' => ' ?Uo・ェ・oU? ' ,
' rabbit ' => ' ??? ' ,
];
$ extendedMonolog -> error (
get_class ( $ exception ),
$ this -> formatPhpJsonLoggerErrorsContext ( $ exception , $ context )
);
يرجى الانتباه إلى الجزء $this->formatPhpJsonLoggerErrorsContext($exception, $context)
.
تعد هذه معالجة ضرورية لتنسيق سجل الأخطاء في JSON وإخراجه.
هذه هي الطريقة المطبقة في NekonomokochanPhpJsonLoggerErrorsContextFormat
.
يتم إخراجه إلى extended-monolog-test-yyyy-mm-dd.log
على النحو التالي.
إذا كنت تريد معرفة المزيد من التفاصيل حول الاستخدام، فيرجى الاطلاع على php-json-logger/tests/ExtendedMonologTest.php
.
{
"log_level" : " ERROR " ,
"message" : " Exception " ,
"channel" : " PhpJsonLogger " ,
"trace_id" : " ExtendedMonologTestTraceId " ,
"file" : " / home / vagrant / php-json-logger / tests / ExtendedMonologTest.php " ,
"line" : 126 ,
"context" : {
"cat" : " ?(=^・^=)? " ,
"dog" : " ?Uo・ェ・oU? " ,
"rabbit" : " ??? "
},
"remote_ip_address" : " 127.0.0.1 " ,
"server_ip_address" : " 127.0.0.1 " ,
"user_agent" : " unknown " ,
"datetime" : " 2018-06-06 17:37:57.440757 " ,
"timezone" : " Asia / Tokyo " ,
"process_time" : 0.16093254089355469 ,
"errors" : {
"message" : " ExtendedMonologTest.outputErrorLog " ,
"code" : 500 ,
"file" : " / home / vagrant / php-json-logger / tests / ExtendedMonologTest.php " ,
"line" : 117 ,
"trace" : [
" #0 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / Framework / TestCase.php(1145): Nekonomokochan \ Tests \ ExtendedMonologTest->outputErrorLog() " ,
" #1 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / Framework / TestCase.php(840): PHPUnit \ Framework \ TestCase->runTest() " ,
" #2 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / Framework / TestResult.php(645): PHPUnit \ Framework \ TestCase->runBare() " ,
" #3 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / Framework / TestCase.php(798): PHPUnit \ Framework \ TestResult->run() " ,
" #4 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / Framework / TestSuite.php(776): PHPUnit \ Framework \ TestCase->run() " ,
" #5 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / TextUI / TestRunner.php(529): PHPUnit \ Framework \ TestSuite->run() " ,
" #6 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / TextUI / Command.php(198): PHPUnit \ TextUI \ TestRunner->doRun() " ,
" #7 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / src / TextUI / Command.php(151): PHPUnit \ TextUI \ Command->run() " ,
" #8 / home / vagrant / php-json-logger / vendor / phpunit / phpunit / phpunit(53): PHPUnit \ TextUI \ Command::main() "
]
}
}
لإرسال السجل إلى Slack، يرجى تنفيذ التعليمات البرمجية التالية.
سيتم إرسال هذا الرمز إلى Slack إذا كان مستوى السجل CRITICAL
أو أعلى.
<?php
use Nekonomokochan PhpJsonLogger LoggerBuilder ;
use Nekonomokochan PhpJsonLogger SlackHandlerBuilder ;
$ exception = new Exception ( ' TestException ' , 500 );
$ context = [
' name ' => ' keitakn ' ,
' email ' => ' [email protected] ' ,
];
$ slackToken = ' YOUR_SLACK_TOKEN ' ;
$ slackChannel = ' YOUR_SLACK_CHANNEL ' ;
$ slackHandlerBuilder = new SlackHandlerBuilder ( $ slackToken , $ slackChannel );
$ slackHandlerBuilder -> setLevel (LoggerBuilder:: CRITICAL );
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setFileName ( $ this -> outputFileBaseName );
$ loggerBuilder -> setSlackHandler ( $ slackHandlerBuilder -> build ());
$ logger = $ loggerBuilder -> build ();
$ logger -> critical ( $ exception , $ context );
الرجاء استخدام LoggerBuilder.setUseInDocker
لاستخدامه على Docker.
عند تعيين setUseInDocker على true، لا يتم إخراج أي ملف ويتم إخراج السجل كـ stdout
.
<?php
use Nekonomokochan PhpJsonLogger LoggerBuilder ;
$ exception = new Exception ( ' TestException ' , 500 );
$ context = [
' name ' => ' keitakn ' ,
' email ' => ' [email protected] ' ,
];
$ loggerBuilder = new LoggerBuilder ();
$ loggerBuilder -> setFileName ( $ this -> outputFileBaseName );
$ loggerBuilder -> setUseInDocker ( true );
$ logger = $ loggerBuilder -> build ();
$ logger -> critical ( $ exception , $ context );
NekonomokochanPhpJsonLoggerLogger
هي فئة فرعية تمتد MonologLogger
يمكنك استخدامه مثل MonologLogger
.
ومع ذلك، بالنسبة للطرق التالية، يمكنك فقط تمرير الفئات التي تقوم بتوسيع Exception
أو Error
كوسيطات.
NekonomokochanPhpJsonLoggerLogger::error()
NekonomokochanPhpJsonLoggerLogger::critical()
NekonomokochanPhpJsonLoggerLogger::alert()
NekonomokochanPhpJsonLoggerLogger::emergency()
في حالة الانتهاك، سوف NekonomokochanPhpJsonLoggerLogger
برمي NekonomokochanPhpJsonLoggerInvalidArgumentException
معهد ماساتشوستس للتكنولوجيا