মাস্টার প্রক্রিয়াটির STDOUT এবং STDERR এ Nginx অ্যাক্সেস_লগ এবং ত্রুটি_ লগ রয়েছে


136

মাস্টার প্রসেস কোনও ফাইলের পরিবর্তে STDOUT STDERR এ লগ করার কোনও উপায় আছে কি?

দেখে মনে হচ্ছে আপনি কেবল অ্যাক্সেস_লগের নির্দেশিকাতে একটি ফাইলপথ পাস করতে পারবেন:

access_log  /var/log/nginx/access.log

এবং একই ত্রুটি_লগের জন্য যায়:

error_log /var/log/nginx/error.log

আমি বুঝতে পারি যে এটি কেবল এনগিনেক্সের বৈশিষ্ট্য নাও হতে পারে, উদাহরণস্বরূপ, আমি একটি সংক্ষিপ্ত সমাধানের মধ্যে আগ্রহী হব যা লেজ ব্যবহার করে, উদাহরণস্বরূপ। এটি অগ্রাধিকারযোগ্য যে এটি মাস্টার প্রক্রিয়া থেকে এসেছে যদিও আমি অগ্রভাগে nginx চালাচ্ছি।


14
ডকার পাত্রে ভিতরে Nginx ব্যবহার করছেন? এই উত্তরটি চেকআউট করুন ।
czerasz

গৃহীত উত্তর (প্যাট্রিক্স) অফিশিয়াল এনজিন্স ডকার ইমেজ (hub.docker.com/_/nginx) এর জন্য কাজ করে।
ফারশিদ টি

উত্তর:


197

সম্পাদনা: মনে হচ্ছে এনজিনেক্স এখন আননের উত্তরেerror_log stderr; উল্লিখিতভাবে সমর্থন করে ।

আপনি লগগুলিতে প্রেরণ করতে পারেন /dev/stdout। ইন nginx.conf:

daemon off;
error_log /dev/stdout info;

http {
  access_log /dev/stdout;
  ...
}

সম্পাদনা করুন: ln -sf / proc / self / fd / dev / চালানোর প্রয়োজন হতে পারে যদি নির্দিষ্ট ডকার পাত্রে ব্যবহার করা হয়, তবে ব্যবহার করুন /dev/fd/1বা/dev/fd/2


2
আমি যখন এটি করার চেষ্টা করব তখন আমি নিম্নলিখিত ত্রুটিটি পেয়েছি: 2014/07/29 10:19:09 [উত্সর্গ] 13742 # 0: খোলা () "/ দেব / স্টাডাউট" ব্যর্থ হয়েছে (13: অনুমতি অস্বীকার করেছে)
জন তিরসেন

1
জোন, আপনি কি সিস্টেম চালু আছে? আমার সিস্টেমে / dev / stdout হ'ল ওয়ার্ল্ড-রিডেবল সিমলিংক থেকে / dev / fd / 1 যা মালিকানাধীন এবং আমার ব্যবহারকারী দ্বারা লেখা + পঠনযোগ্য।
প্যাট্রিক

1
ENXIOStdout যখন কোনও ফাইলের পরিবর্তে কোনও সকেটের জন্য খোলা থাকে তখন আমি এটি ব্যর্থ দেখতে পাচ্ছি । একটি প্রবাহের কার্নেল টিকিট রয়েছে যা এটি ইচ্ছাকৃত এবং অভিপ্রায় দ্বারা নির্দেশিত: bugzilla.kernel.org/show_bug.cgi?id=1360 - এই উত্তরটি কিছু ক্ষেত্রে যথেষ্ট হলেও এটি সম্পূর্ণ সম্ভাবনার পরিধিটি কভার করে না ব্যর্থতা।
চার্লস ডাফি

1
কোনও সাফল্য ছাড়াই এই কয়েক ঘন্টা হারিয়েছেন। সমস্ত কিছু পরিবর্তন করার চেষ্টা করা (ডেমন মোড, ব্যবহারকারী, এনগিনেক্স সংস্করণ ইত্যাদি)। এটি কেবল আমার পক্ষে কাজ করে না। "" "খুলুন ()" / dev / stderr "ব্যর্থ হয়েছে (6: এই জাতীয় কোনও ডিভাইস বা ঠিকানা নেই)" "" ( stderr
স্টাডাউট

1
কোনও ডকারের অভ্যন্তরে আপনি অনুমতিটি অস্বীকার করতে পারেন যদি আপনার প্রক্রিয়াটি ধারকটিতে রুট হিসাবে চালিত না হয়। পরবর্তী সংস্করণে এটির জন্য একটি ঠিকঠাক আসছে।
ডাবিস ভান্ডারমির

54

যদি প্রশ্নটি ডকার সম্পর্কিত হয় ... অফিসিয়াল এনজিন্স ডকার ইমেজগুলি স্টাডাউট / স্টডারারের দিকে সফটলিঙ্কগুলি তৈরি করে এটি করে

RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log

আরএফ: https://microbadger.com/images/nginx


5
এই উত্তরটি বেশিরভাগ সঠিক, কিন্তু দুঃখিতভাবে নয় আলপাইন চিত্র (দেখুন github.com/nginxinc/docker-nginx/blob/master/stable/alpine/... ), অন্যদের মতো শুধুমাত্র Jessie এই বিবৃতি ব্যবহার করতে। আপনি যদি কোনও আলপাইন ব্যবহারকারী হন তবে কেবল নিজের ডকফাইফাইলটি তৈরি করুন FROM nginx:alpine RUN ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log CMD ["nginx-debug", "-g", "daemon off;"]
জুনশ্যাক্ট

1
প্যাট্রিকের উত্তর অফিশিয়াল এনজিনেক্স ইমেজ ( hub.docker.com/_/nginx ), উভয় ডেবিয়ান (সর্বশেষ) এবং আলপাইন বেসগুলির জন্য কাজ করে।
ফারশিদ টি

আপনার আরএফএফ লিঙ্কটি মারা গেছে বলে মনে হচ্ছে।
পেরেডি

@ জোনাশ্যাক্ট আমি আলপাইন চিত্রগুলি ব্যবহার করেছি এবং আমি এটি
স্টডআউটেও

উপরোক্ত রেখার সাথে ডকার ফাইলটি দেখতে ( hub.docker.com/_/nginx ) ক্লিক করুন ( 100 লাইনের আগে কোথাও)
qräbnö

24
Syntax: error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
Default:    
error_log logs/error.log error;
Context:    main, http, stream, server, location

http://nginx.org/en/docs/ngx_core_module.html#error_log

ব্যবহার করবেন না: /dev/stderr আপনি যদি সিস্টেমড-এনস্পেন ব্যবহার করতে চলেছেন তবে এটি আপনার সেটআপটি ভেঙে দেবে।


5

ডকনারের পাত্রে এনগিনেক্স চালানোর সময়, সচেতন থাকুন যে লগ ডিরের উপরে মাউন্ট করা একটি ভলিউম আপনার ডকফাইলে লগ ফাইল এবং স্টডআউট / স্টডারারের মধ্যে একটি সফটলিঙ্ক তৈরির উদ্দেশ্যকে পরাস্ত করে, যেমন @ বোবোর জবাব বর্ণিত হয়েছে ।

সেক্ষেত্রে আপনি হয় আপনার এন্ট্রিপয়েন্টে সফটলিঙ্ক তৈরি করতে পারেন (ভলিউম মাউন্ট করার পরে সম্পাদিত) বা কোনও ভলিউম ব্যবহার করতে পারেন না (যেমন লগগুলি ইতিমধ্যে কেন্দ্রীয় লগিং সিস্টেম দ্বারা সংগ্রহ করা হয়)।


3

পিএইচপি-এফপিএমের ডকার ইমেজে, আমি এই জাতীয় পন্থাটি দেখেছি:

# cat /usr/local/etc/php-fpm.d/docker.conf
[global]
error_log = /proc/self/fd/2

[www]
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2

1

একটি ডিবাগ উদ্দেশ্যে:

/usr/sbin/nginx -g "daemon off;error_log /dev/stdout debug;"

একটি ক্লাসিক উদ্দেশ্যে

/usr/sbin/nginx -g "daemon off;error_log /dev/stdout info;"

দরকার

কনফিগ ফাইলে সার্ভার ব্র্যাকেটের নীচে

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