কনসোল.উরাইটলাইন কোথায় এএসপি.নেটে যায়?


313

J2EE অ্যাপ্লিকেশনটিতে (যেমন ওয়েবস্পিয়ারে চলমান একটি), আমি যখন ব্যবহার করি তখন System.out.println()আমার পাঠ্যটি স্ট্যান্ডার্ড হয়ে যায়, যা ওয়েবস্পিয়ার অ্যাডমিন কনসোল দ্বারা একটি ফাইলের সাথে ম্যাপ করা হয়।

একটি এএসপি.এনইটি অ্যাপ্লিকেশনটিতে (আইআইএস-এ চলছে এমন একটি), কোথায় আউটপুট আসে Console.WriteLine() যায়? আইআইএস প্রক্রিয়াটির অবশ্যই একটি স্টিডিন, স্টাডআউট এবং স্টাডার থাকতে হবে; তবে স্টাডাউটটি / ডিভ / নাল এর উইন্ডোজ সংস্করণে ম্যাপ করা আছে বা আমি কী এখানে একটি মূল ধারণাটি অনুপস্থিত করছি?

আমি জিজ্ঞাসা করছি না আমার সেখানে লগ করা উচিত কিনা (আমি লগ 4 নেট ব্যবহার করি) তবে আউটপুট কোথায় যায়? আমার সেরা তথ্যটি এই আলোচনার মধ্য দিয়ে এসেছে যেখানে তারা বলে Console.SetOut()যে পরিবর্তন করতে পারে TextWriter, তবে কনসোলের প্রাথমিক মান কী, বা রানটাইম কোডের বাইরে কনফিগার / সেট-এ কীভাবে সেট করা যায় তার প্রশ্নের উত্তর এখনও দেয়নি।


এটি আসলে ASP.NET কর্মী প্রক্রিয়াটির STDOUT এ যাবে। যেখানে এটি নির্দেশ করা হয়েছে, আমি নিশ্চিত নই।
ফ্লাইওয়াত

2
এটি প্রশ্ন - STDOUT কোথায় যায়?
কেভিন হাকানসন

35
স্পষ্টতই কেউ জানে না, তবে প্রত্যেকে এটি তাদের উদাহরণগুলিতে ব্যবহার করে। wtf
জেসন

আপনি যদি ডিবাগিংয়ের উদ্দেশ্যে সন্ধান করছিলেন তবে আমি নীচে @ গ্রেগ বার্নহার্টের উত্তরটি উল্লেখ করব।
রাম

1
কেভিনহাকানসন এফডব্লিউআইডাব্লু এই সমস্ত বছর পরে, যে কোনও প্রক্রিয়ার জন্য স্টাডাউটকে তার পিতামাতার দ্বারা বেছে নেওয়া হয়, প্রক্রিয়া যা এটি শুরু করেছিল। এই ক্ষেত্রে, পিতামাতার আইআইএস হবে। এটি আপনাকে সঠিক দিকে নির্দেশ করতে পারে
jpaugh

উত্তর:


197

আপনি যদি নেট রিফ্লেক্টরেConsole ক্লাসের দিকে তাকান , আপনি দেখতে পাবেন যে কোনও প্রক্রিয়াটির সাথে যদি কোনও সংযুক্ত কনসোল না থাকে এবং এটি (ক এর অভ্যন্তরে আবৃত ) দ্বারা ব্যাক হয় তবে এটি একটি ডামি বাস্তবায়নConsole.OutConsole.ErrorStream.NullTextWriterStream মূলত সমস্ত ইনপুট উপেক্ষা করে এটি এবং কোন আউটপুট দেয় না।

সুতরাং এটি ধারণাগতভাবে সমতুল্য /dev/null, তবে বাস্তবায়নটি আরও সহজতর হয়েছে: নাল ডিভাইসটির সাথে কোনও আসল I / O হচ্ছে না।

এছাড়াও, কল করা বাদে SetOutডিফল্ট কনফিগার করার কোনও উপায় নেই।


18
সিস্টেম.ডায়াগনস্টিক্স.ডেবুগ.উইটলাইন () ব্যবহার করুন যদি আপনি আসলে আউটপুট উইন্ডোতে কিছু লিখতে চান, যা আপনি ডিবাগ করার সময় দেখতে পাবেন।
01 Г И І И

743

আপনি যদি এর System.Diagnostics.Debug.WriteLine(...)পরিবর্তে ব্যবহার করেন Console.WriteLine()তবে ফলাফলটি ভিজ্যুয়াল স্টুডিওর আউটপুট উইন্ডোতে দেখতে পাবেন ।


45
আমি কেভিনের মতো একই প্রশ্ন জিজ্ঞাসা করতাম, তবে এই উত্তরটি আমি খুঁজছি।
জাসজ

11
আরও একটি সামান্য ইঙ্গিত; যদি আপনি কোনও ফর্ম্যাট স্ট্রিং মুদ্রণ করছেন তবে একটি যুক্তি বিরোধ থেকে বাঁচতে ডিবাগ.উইরাইটলাইন এর পরিবর্তে ডিবাগ.প্রিন্ট ব্যবহার করুন (দেখুন সোশ্যাল.এমএসএনএন.মাইক্রোসফট.ফর্মেশনস / ওয়ার / এক্সপ্রেসভিসি / থ্রিড /… )।
নিকোলাস রিলে

12
নোট করুন যে আউটপুট উইন্ডোতে বার্তাগুলি প্রদর্শিত হওয়ার জন্য ডিবাগারটি সংযুক্ত করা দরকার।
কসমিন

4
এটি স্থানীয় আইআইএস বা কোনও কিছুর জন্য কাজ করে না? আমি এফ 5 দিয়ে এটি শুরু করছি (তবুও ডিবাগারটি সংযুক্ত করা হয়েছে) সত্ত্বেও আমার জীবনের জন্য আউটপুট লিখতে সক্ষম হতে পারে বলে মনে হচ্ছে না। আমি জানি যে আমার কোডটি কার্যকর করা হচ্ছে কারণ আমি একটি ফাইলকে সূক্ষ্মভাবে লিখতে পারি।
কেট

@ কসমিন আমার সাথে কি সঠিক .exe যুক্ত করতে হবে?
গ্রেস

26

ডেটা কনটেক্সট এর লগ আউটপুট আউটপুট উইন্ডোতে পরিবর্তন করার চেষ্টা করে আমি এই প্রশ্নটি পেয়েছি। অন্য যে কেউ একই কাজ করার চেষ্টা করছে, আমি যা করেছি তা এটি তৈরি করেছিল:

class DebugTextWriter : System.IO.TextWriter {
   public override void Write(char[] buffer, int index, int count) {
       System.Diagnostics.Debug.Write(new String(buffer, index, count));
   }

   public override void Write(string value) {
       System.Diagnostics.Debug.Write(value);
   }

   public override Encoding Encoding {
       get { return System.Text.Encoding.Default; }
   }
}

এর পরে আনন্ড করুন: ডিসি.লগ = নতুন ডিবাগটেক্সট রাইটার () এবং আমি আউটপুট উইন্ডোতে সমস্ত প্রশ্ন দেখতে পাই (ডিসি হ'ল ডেটা কনটেক্সট)।

আরও তথ্যের জন্য এই কটাক্ষপাত আছে: http://damieng.com/blog/2008/07/30/linq-to-sql-log-to-debug-window-file-memory-or-multiple-writers


আপনি সম্পূর্ণ স্থিতিশীল পদ্ধতি মোড়ানো করছেন কেন কেবল স্ট্যাটিক মোড়ক ব্যবহার করবেন না? কেন বাড়াতে বিরক্ত করবেন TextWriter?
কেট

1
আপনি ব্যবহার করতে পারে dc.Log = s => Debug.WriteLine(s);
রুডি

1
অ্যাপ্লিকেশন_স্টার্ট: সিস্টেম.কনসোল.সেটআউট (নতুন ডিবাগটেক্সট রাইটার ());
স্টিফান স্টেইগার

আরও ভাল, কনসোল.সেটআউট (নতুন ডিবাগটেক্সট রাইটার ());
Alde

18

আপনি যদি আইআইএস এক্সপ্রেস ব্যবহার করেন এবং কমান্ড প্রম্পটের মাধ্যমে এটিকে চালু করেন, এটি ডস উইন্ডোটি উন্মুক্ত ছেড়ে দেবে এবং আপনি Console.Writeসেখানে বিবৃতি দেখতে পাবেন ।

সুতরাং উদাহরণস্বরূপ একটি কমান্ড উইন্ডো খুলুন এবং টাইপ করুন:

"C:\Program Files (x86)\IIS Express\iisexpress" /path:C:\Projects\Website1 /port:1655

এটি ধরে নিয়েছে যে আপনার সি: jects প্রকল্পসমূহ \ ওয়েবসাইট 1 এ একটি ওয়েবসাইট ডিরেক্টরি আছে। এটি আইআইএস এক্সপ্রেস শুরু করবে এবং আপনার ওয়েবসাইট ডিরেক্টরিতে পৃষ্ঠাগুলি পরিবেশন করবে। এটি কমান্ড উইন্ডোটি খোলা রাখবে এবং আপনি সেখানে আউটপুট তথ্য দেখতে পাবেন। ধরা যাক আপনার এই ফাইলটিতে ডিফল্ট.এএসপিএক্স সহ একটি ফাইল রয়েছে:

<%@ Page Language="C#" %>
<html>
<body>
    <form id="form1" runat="server">
    Hello!

    <% for(int i = 0; i < 6; i++) %>
       <% { Console.WriteLine(i.ToString()); }%>

    </form>
</body>
</html>

আপনার ব্রাউজার এবং কমান্ড উইন্ডোগুলি সাজান যাতে আপনি সেগুলি উভয়ই স্ক্রিনে দেখতে পান। এখন আপনার ব্রাউজারে টাইপ করুন: http://localhost:1655/। আপনি হ্যালো দেখতে পাবেন! ওয়েবপৃষ্ঠায়, তবে কমান্ড উইন্ডোতে আপনি এরকম কিছু দেখতে পাবেন

Request started: "GET" http://localhost:1655/
0
1
2
3
4
5
Request ended: http://localhost:1655/default.aspx with HTTP status 200.0

আমি মার্কআপে কোনও কোড ব্লকে কোড রেখে এটিকে সহজ করে দিয়েছি তবে আপনার কোড-এর পিছনে বা আপনার কোডের অন্য কোথাও যে কোনও কনসোল বিবৃতি এখানে প্রদর্শিত হবে।


এই কারণে বিকাশ করার সময় +1 আমি সর্বদা আইআইএস এক্সপ্রেস ব্যবহার করি। কনসোল আউটপুট অমূল্য, সম্মুখ প্রান্তে জাভাস্ক্রিপ্ট কনসোলের মতো পিছনের প্রান্তে ব্যবহৃত হয়। ফাইল-ভিত্তিক সার্ভার লগ ব্যবহারের বিপরীতে সময়ের ডিবাগিংয়ের হিপগুলি সংরক্ষণ করে। আপনাকে "বন্ধুত্বপূর্ণ" ব্যতিক্রম হ্যান্ডলিংকে ওভাররাইড করতে হবে না - দুর্দান্ত "ওফস" ব্রাউজার পৃষ্ঠাটি রাখুন, এবং কেবল কনসোলটিতে ব্যতিক্রমটি আউটপুট আউটপুট আউটপুট আউটপুট করুন।
ingredient_15939

9

System.Diagnostics.Debug.WriteLine(...);এটি ভিজ্যুয়াল স্টুডিও ২০০৮ এর ইমিডিয়েট উইন্ডোতে প্রবেশ করে ।

মেনুতে যান ডিবাগ -> উইন্ডোজ -> তাত্ক্ষণিক :

এখানে চিত্র বিবরণ লিখুন


আমার ভিজ্যুয়াল স্টুডিও ২০১২-এ, আপনি যা বলেছেন তা আমি অনুসরণ করেছি তবে ধন্যবাদটি Outputছাড়াও স্ট্রিংটি উপস্থিত হয়েছিল Immediate Window!
WTFZane

6

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


5

আপনি যদি কোনও কঠোর কনসোল অ্যাপ্লিকেশন না করেন তবে আমি এটি ব্যবহার করব না, কারণ আপনি সত্যই এটি দেখতে পারবেন না। আমি ট্রেস.উরাইটলাইন () ডিবাগিং-টাইপ তথ্যের জন্য ব্যবহার করব যা উত্পাদনে চালু এবং বন্ধ করা যায়।


: হাঁ, এখানে একটি ভাল জায়গা থেকে শুরু হচ্ছে msdn.microsoft.com/en-us/library/x5952w0c.aspx
বেন ডুগুইড - Zhaph

3

TraceContextASP.NET মধ্যে বস্তু লিখেছেন DefaultTraceListenerযা হোস্ট প্রক্রিয়া 'থেকে আউটপুট মান আউটপুট । পরিবর্তে ব্যবহারের পরিবর্তে Console.Write(), আপনি যদি ব্যবহার করেন তবে Trace.Writeআউটপুট প্রক্রিয়াটির স্ট্যান্ডার্ড আউটপুটে যাবে।

আপনি System.Diagnostics.Processনিজের সাইটের জন্য ASP.NET প্রক্রিয়া পেতে এবং OutputDataRecievedইভেন্টটি ব্যবহার করে স্ট্যান্ডার্ড আউটপুট নিরীক্ষণ করতে আপনি এই অবজেক্টটি ব্যবহার করতে পারেন ।


1

আপনি যদি আপনার এএসপি.এন.টি প্রকল্পে এনএলগ ব্যবহার করার ঘটনা ঘটে থাকেন তবে আপনি একটি ডিবাগার লক্ষ্য যুক্ত করতে পারেন :

<targets>
    <target name="debugger" xsi:type="Debugger"
            layout="${date:format=HH\:mm\:ss}|${pad:padding=5:inner=${level:uppercase=true}}|${message} "/>

এবং আপনি যে স্তরটি চান তার জন্য এই লক্ষ্যে লগগুলি লিখে:

<rules>
    <logger name="*" minlevel="Trace" writeTo="debugger" />

এখন আপনার ভিএস এর "আউটপুট" উইন্ডোতে জেটির মতো কনসোল আউটপুট রয়েছে এবং আপনি ডিবাগ মোডে (এফ 5) চালাচ্ছেন তা নিশ্চিত করুন।


0

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

এই মুহুর্তে আপনি কেবল লগার ফ্যাক্টরি যুক্ত করতে পারেন dএডডবগ (লগলভেল.ডেবগ); আপনার কনফিগার বিভাগে এবং এটি কমপক্ষে আপনাকে লগগুলি ডিবাগ আউটপুট উইন্ডোতে দেখায়।

সুসংবাদ কোরি ২.০ এ সমস্ত পরিবর্তন হবে: https://github.com/aspnet/Announcements/issues/255



-3

একটি এএসপি.এনইটি অ্যাপ্লিকেশনটিতে, আমি মনে করি এটি আউটপুট বা কনসোল উইন্ডোতে যায় যা ডিবাগিংয়ের সময় দৃশ্যমান।

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