আমি কীভাবে একটি ফাইলে ত্রুটি এবং সতর্কতা লগ করব?


233

আমি কীভাবে সমস্ত ত্রুটি এবং সতর্কতা চালু করব এবং এগুলিকে একটি ফাইলে লগ করব, তবে স্ক্রিপ্টের মধ্যে সেগুলি সেট আপ করতে (php.ini তে কোনও কিছু পরিবর্তন না করে)?

আমি কোনও ফাইলের নাম সংজ্ঞায়িত করতে চাই এবং যাতে সমস্ত ত্রুটি এবং সতর্কতা এতে লগ ইন হয়।

উত্তর:


358

নিম্নলিখিত কোড ব্যবহার করুন:

ini_set("log_errors", 1);
ini_set("error_log", "/tmp/php-error.log");
error_log( "Hello, errors!" );

তারপরে ফাইলটি দেখুন:

tail -f /tmp/php-error.log

বা 2008 থেকে এই ব্লগ এন্ট্রিphp.ini বর্ণিত আপডেট করুন ।


41
ini_setকেবলমাত্র সেই কোডটি কার্যকর করা হলে কাজ করে। কোড বিশিষ্ট ত্রুটিযুক্ত কোডের জন্য কার্যকর নয় কারণ কোডটি কার্যকর করার আগে ত্রুটিটি হবে । পরিবর্তে এই পরিবর্তনগুলি php.ini এ লিখুন।
হাক্রে

9
আপনি যদি php.ini সম্পাদনা করতে না পারেন, আপনি এটি .htaccess: এ যুক্ত করতে সক্ষম হবেন php_flag log_errors on php_value error_log /home/path/public_html/domain/PHP_errors.log। দেখুন perishablepress.com/...
Matthieu

1
আমার একটি প্রশ্ন আছে, পরিবর্তে আমার এইচটিডকস ফোল্ডারে কীভাবে ত্রুটি.লগ ফাইল তৈরি করা যায়?
টমি

আমার ধারণা আপনি যে ফোল্ডারটি চান সেখান থেকে tmp/php-error.logআপনি যে জায়গাটি চান তা কেবল পরিবর্তন করেছেন ?
লুক

এটি আমার পিএইচপি 5.5.0
সুপুস্টার

94

দেখা

  • error_log - কোথাও একটি ত্রুটি বার্তা প্রেরণ করুন

উদাহরণ

error_log("You messed up!", 3, "/var/tmp/my-errors.log");

আপনি যখনই কোনও ত্রুটি বা সতর্কতা বা আপনার যা কিছু প্রয়োজন লগতে ঘটে তখন আপনার জন্য এই ক্রিয়াকলাপটি কল করতে আপনি নিজের ত্রুটি হ্যান্ডলারের সাহায্যে ত্রুটি হ্যান্ডলিংকে কাস্টমাইজ করতে পারেন । অতিরিক্ত তথ্যের জন্য, দয়া করে পিএইচপি ম্যানুয়ালটিতে অধ্যায় ত্রুটি পরিচালনা করার বিষয়টি দেখুন


42

এই কোডগুলি কেবল আপনার পিএইচপি / সূচক ফাইলের শীর্ষে রাখুন:

error_reporting(E_ALL); // Error/Exception engine, always use E_ALL

ini_set('ignore_repeated_errors', TRUE); // always use TRUE

ini_set('display_errors', FALSE); // Error/Exception display, use FALSE only in production environment or real server. Use TRUE in development environment

ini_set('log_errors', TRUE); // Error/Exception file logging engine.
ini_set('error_log', 'your/path/to/errors.log'); // Logging file path

4
যে শুধুমাত্র যদি তুমি আরো সমস্ত ত্রুটি, এবং / অথবা ব্রাউজারে আউটপুট প্রদর্শন করা করতে চান ছাড়াও লগিং করতে। display_errorsলাইভ প্রোডাকশন সার্ভারটি কখনও চালু করা উচিত নয় - সেই নির্দেশটি বিশেষভাবে ব্যবহারকারীর কাছে আউটপুট দেওয়ার জন্য এবং লগিংয়ের ক্ষেত্রে তার কোনও প্রভাব পড়ে না। php.net/manual/en/…
অ্যারন ওয়াল্যান্টাইন

22

এই কোডটি .htaccess এ যুক্ত করুন ( php.ini / ini_set ফাংশনের বিকল্প হিসাবে ):

<IfModule mod_php5.c>
php_flag log_errors on 
php_value error_log ./path_to_MY_PHP_ERRORS.log
# php_flag display_errors on 
</IfModule>

* যেমন মন্তব্য করা হয়েছে: এটি অ্যাপাচি- টাইপ সার্ভারগুলির জন্য, এবং এনগিনেক্স বা অন্যদের জন্য নয় ।


7
এটি অবশ্য অ্যাপাচি-র পিএইচপি মডিউলটির সাথে বিশেষভাবে করা।
স্যাক্রেডসকুল

9

এটি আমার ব্যক্তিগত শর্ট ফাংশন

# logging
/*
[2017-03-20 3:35:43] [INFO] [file.php] Here we are
[2017-03-20 3:35:43] [ERROR] [file.php] Not good
[2017-03-20 3:35:43] [DEBUG] [file.php] Regex empty

mylog ('hallo') -> INFO
mylog ('fail', 'e') -> ERROR
mylog ('next', 'd') -> DEBUG
mylog ('next', 'd', 'debug.log') -> DEBUG file debug.log
*/
function mylog($text, $level='i', $file='logs') {
    switch (strtolower($level)) {
        case 'e':
        case 'error':
            $level='ERROR';
            break;
        case 'i':
        case 'info':
            $level='INFO';
            break;
        case 'd':
        case 'debug':
            $level='DEBUG';
            break;
        default:
            $level='INFO';
    }
    error_log(date("[Y-m-d H:i:s]")."\t[".$level."]\t[".basename(__FILE__)."]\t".$text."\n", 3, $file);
}

6

log_errorsPhp.ini এর কনফিগারেশন বিকল্পটি একবার দেখুন । এটি আপনি যা করতে চান ঠিক তেমনই মনে হচ্ছে। আমি মনে করি আপনি error_logনিজের লগিং ফাইলটি সেট করতে বিকল্পটি ব্যবহার করতে পারেন ।

যখন log_errorsনির্দেশটি সেট করা থাকে On, পিএইচপি দ্বারা উল্লিখিত কোনও ত্রুটি সার্ভার লগ বা নির্দিষ্ট ফাইলের সাথে লগ করা হত error_log। আপনার ini_setযদি প্রয়োজন হয় তবে আপনি এই বিকল্পগুলিও খুব সহজেই সেট করতে পারেন ।

(দয়া করে নোট করুন যে display_errorsএই বিকল্পটি সক্ষম থাকলে php.ini এ অক্ষম করা উচিত)


1
display_errorsআপনি সক্ষম করলে কেন অক্ষম করা উচিত log_errors? আমার মতে অর্থবোধ করে না। :)
গাইডো হেন্ডরিক্স

5
কারণ কোনও প্রোডাকশন সার্ভারে ত্রুটিগুলির বিষয়বস্তু জনসাধারণের কাছে আউটপুট দেওয়ার দরকার নেই, বিশেষত যদি ত্রুটির পাঠ্যটি কোনও ফাইলে বিবেচনার সাথে লগ ইন করা হয়।
শাবিরোব

3
প্রদর্শন ত্রুটি সবসময় উত্পাদন সার্ভারে অক্ষম করা উচিত। ত্রুটি লগিং অন্য কোথাও কনফিগার করা থাকলে তা নয়, তবে সর্বদা। ত্রুটিগুলি ডিফল্টরূপে অ্যাপাচি ত্রুটি লগতে লগ করা হয়, এটি প্রায়শই যথেষ্ট।
পিহান

1
উত্পাদনে ত্রুটিগুলি
দেখানো

0

তদ্ব্যতীত, এটি কাজ করার জন্য আপনার "AllowOverride বিকল্পসমূহ" নির্দেশিকা প্রয়োজন। (অ্যাপাচি ২.২.১৫)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.