বিরতিযুক্ত লগ 4 নেট রোলিংফাইলে অ্যাপেন্ডার লক করা ফাইল সমস্যা


113

আমরা বিকাশ এবং উত্পাদন মেশিনের মধ্যে একটি অন্তর্বর্তী সমস্যা দেখছি যার দ্বারা আমাদের লগ ফাইলগুলিতে লগ হচ্ছে না।

ভিজ্যুয়াল স্টুডিও ব্যবহার করে বিকাশ এবং ডিবাগিং চলাকালীন আমরা ভিএস আউটপুট উইন্ডোতে নিম্নলিখিত লগ 4 নেট ত্রুটি বার্তা পাই:

log4net:ERROR [RollingFileAppender] Unable to acquire lock on file C:\folder\file.log.

প্রক্রিয়াটি 'সি: \ ফোল্ডার \ file.log' ফাইলটি অ্যাক্সেস করতে পারে না কারণ এটি অন্য প্রক্রিয়া দ্বারা ব্যবহৃত হচ্ছে।

log4net:ERROR XmlConfigurator: Failed to find configuration section 'log4net' in the application's .config file.
Check your .config file for the <log4net> and <configSections> elements.

কনফিগারেশন বিভাগটি দেখতে হবে:

<section
  name="log4net"
  type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />

ইস্যুটির জন্য আমাদের বর্তমান কাজটি শেষ লগ ফাইলটির নতুন নামকরণ। আমরা অবশ্যই এটি ব্যর্থ হওয়ার আশা করব (পূর্বোক্ত ফাইল লক হওয়ার কারণে), তবে এটি সাধারণত হয় না। একবার বা দুবার পুনঃনামকরণ থেকে একটি লক কারণে ব্যর্থ হয়েছে aspnet_wp.exe প্রক্রিয়া।

আমাদের লগ 4 নেট কনফিগারেশন বিভাগটি নীচে দেখানো হয়েছে:

<log4net>
  <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\folder\file.log"/>
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd" />
    <rollingStyle value="Date" />
    <maximumFileSize value="10MB" />
    <maxSizeRollBackups value="100" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="[Header]&#xA;"/>
      <footer value="[Footer]&#xA;"/>
      <conversionPattern value="%date %-5level %logger ${COMPUTERNAME} %property{UserHostAddress} [%property{SessionID}] - %message%newline"/>
    </layout>
  </appender>
  <root>
    <level value="INFO"/>
    <appender-ref ref="RollingLogFileAppender"/>
  </root>
</log4net>

উল্লিখিত হিসাবে, আমরা এটি মেশিনগুলিতে মাঝে মাঝে দেখতে পাচ্ছি, তবে সমস্যাটি একবার হয়ে গেলে এটি স্থির থাকে।

উত্তর:


172

যোগ করার চেষ্টা করুন

<লকিংমোডেল প্রকার = "লগ 4 নেট.অ্যাপেন্ডার.ফায়াল অ্যাপেন্ডার + মিনিমাল লক" />

আপনার <appender />উপাদান যাও। কিছু কার্যকারিতা প্রভাব রয়েছে কারণ এর অর্থ হ'ল লগ 4 নেট ফাইলটি লক করবে, এটিকে লিখবে এবং প্রতিটি লেখার ক্রিয়াকলাপের জন্য এটি আনলক করবে (ডিফল্ট আচরণের বিপরীতে, যা দীর্ঘ সময় ধরে লকটি ধরে রাখে এবং ধরে রাখে)।

ডিফল্ট আচরণের একটি নিদর্শন হ'ল আপনি যদি একই ওয়েবসাইটটিতে চলমান একাধিক কর্মী প্রসেসের আওতায় কার্যকর হওয়া কোনও ওয়েবসাইটের অধীনে এটি ব্যবহার করেন তবে প্রত্যেকে অনির্দিষ্টকালের জন্য সেই লকটি ধরে রাখার চেষ্টা করবে এবং এর মধ্যে দুটি হ'ল শুধু হারাতে চলেছি। লকিং মডেলটিকে সর্বনিম্ন লকটিতে পরিবর্তন করা এই সমস্যাটির চারপাশে কাজ করে।

(ডিবাগিংয়ের সময়, অবাস্তব সমাপ্তি এবং প্রচুর নতুন কর্মী প্রক্রিয়া ঘুরিয়ে ফেলা হ'ল হ'ল ধরণের ঘটনাটি হ'ল)

শুভকামনা!


আমার লগার কেন মাঝেমধ্যে কাজ করছিল তা সম্পর্কে আমাকে প্রচুর মাথা চুলকানো রক্ষা করেছে। আমি অ্যাপ পুলটিতে কর্মী প্রক্রিয়া যুক্ত করেছি, দুহ!
রাইনোডেএক্সএক্স 64

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

অনেক অনেক ধন্যবাদ, অনেক সময় বাঁচিয়েছি।
শিভা

2
আমি কেবল ফাইলটি পড়তে চাই, তবে লগ 4 নেট পাশাপাশি পড়ার জন্য লক করে ... এটি কেবল লেখার জন্য এবং ভাগ করে পঠনের জন্য লক করতে পারে
জোবাডিনিজ

37

লগ 4 নেট এফএকিউ সম্পর্কে সচেতন থাকুন :

একই ফাইলটিতে লগ ইন করার জন্য আমি কীভাবে একাধিক প্রক্রিয়া পেতে পারি?

এমনকি যে কোনও বিকল্প প্রদত্ত বিকল্প চেষ্টা করা শুরু করার আগে, নিজেকে জিজ্ঞাসা করুন একই ফাইলে আপনার একাধিক প্রক্রিয়া লগ করার দরকার আছে কিনা, তারপর এটি করবেন না ;-)।

ফাইলঅ্যাপেন্ডার এই ব্যবহারের জন্য প্লাগেবল লকিং মডেল সরবরাহ করে তবে বিদ্যমান সমস্ত বাস্তবায়নে সমস্যা এবং ত্রুটি রয়েছে।

ডিফল্টরূপে ফাইল অ্যাপেন্ডার লগ করার সময় লগ ফাইলটিতে একচেটিয়া লেখার লক ধারণ করে। এটি অন্য প্রক্রিয়াগুলিকে ফাইলটিতে লেখা থেকে বাধা দেয়। এই মডেলটি লিনাক্স এবং লগ ফাইলগুলিতে মনো (কমপক্ষে কয়েকটি সংস্করণে) নিয়ে ভাঙ্গতে পরিচিত এবং অন্য কোনও প্রক্রিয়া লগ ফাইল অ্যাক্সেস করার চেষ্টা করার সাথে সাথেই এটি দূষিত হতে পারে।

লগ লেখার সময় মিনিমলক কেবল লেখার লকটি অর্জন করে। পারফরম্যান্সে যথেষ্ট ক্ষতির পরেও এটি একাধিক প্রক্রিয়া একই ফাইলটিতে ইন্টারলিভ লেখার অনুমতি দেয়।

ইন্টারপ্রসেসলক ফাইলটি একেবারেই লক করে না তবে একটি সিস্টেম প্রশস্ত মিটেক্স ব্যবহার করে সিঙ্ক্রোনাইজ করে। এটি কেবল তখনই কাজ করবে যদি সমস্ত প্রক্রিয়াগুলি সহযোগিতা করে (এবং একই লকিং মডেলটি ব্যবহার করে)। প্রতিটি লগ এন্ট্রি লিখিত হওয়ার জন্য একটি মুটেক্সের অধিগ্রহণ এবং প্রকাশের ফলে কর্মক্ষমতা হ্রাস পাবে, তবে মিমটেক্সটি মিনিমলক ব্যবহারের চেয়ে পছন্দনীয়।

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

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


6

যদি তোমার থাকে

<staticLogFileName value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

এবং যোগ করুন

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

তারপরে রোলিংয়ের সময় ত্রুটি ঘটবে। প্রথম প্রক্রিয়াটি নতুন ফাইল তৈরি করবে এবং বর্তমান ফাইলটির নতুন নামকরণ করবে। তারপরে পরবর্তী প্রক্রিয়াটি একই কাজ করবে এবং সদ্য নির্মিত ফাইলটি নেবে এবং নতুন নামকরণ করা ফাইলটি ওভাররাইট করে। শেষ দিন খালি থাকায় লগফিলের ফলাফল।


1
এটি তখনই সত্য যখন একাধিক প্রক্রিয়া একই রোলিং ফাইল অ্যাক্সেস করে। এটি একই প্রক্রিয়ার মধ্যে নিরাপদ। হেক্টরকররিয়া
মাইক চেম্বারলাইন

@ মাইকচেম্বারলাইন ওপি অনুসারে (উত্তর দেওয়ার জন্য তাঁর মন্তব্য দেখুন) লগ-ইন করার জন্য লগ 4 নেট ব্যবহার করে একসাথে একাধিক কর্মী কাজ করবেন। সুতরাং এই বিষয়টি প্রাসঙ্গিক!
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.