লগ 4 নেট কাজ করছে না


123

আরে আমার এই ওয়েব কনফিগটিতে এই কনফিগারেশন রয়েছে

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <param name="File" value="mylog.log" />
        <param name="AppendToFile" value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="" />
            <param name="Footer" value="" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="[Header]\r\n" />
            <param name="Footer" value="[Footer]\r\n" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="LogFileAppender" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</log4net>

কিন্তু log4net কাজ করছে না। আমার প্রকল্পটি সূক্ষ্ম সংকলন করে, এবং আমি কোনও ডিবাগ করতে ত্রুটি পাই না। আমি যে লাইনগুলিকে বলি তা log.debug("somemessage")ঠিকঠাক হয়ে যায়, তবে আমি mylog.logফাইলটি খুঁজে পাই না, তবে এটি কোথায়?


: এই খুব চেক করতে ভুলবেন না stackoverflow.com/a/24617269/114029
Leniel Maccaferri

উত্তর:


298

এই ধরণের জিনিসটির জন্য একটি গেটচা হ'ল XmlConfiguratorনিম্নলিখিত লাইনটি আপনার মধ্যে রেখে অ্যাসেমব্লিতে অ্যাট্রিবিউট যুক্ত করার বিষয়টি নিশ্চিত করা AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator]

অন্যথায় লগ 4 নেট কখনই সক্রিয় হয় না।


5
এই পদ্ধতিটি আমার প্রকল্পে কাজ করত , তবে এটি কোনওভাবে কাজ বন্ধ করে দেয়। এটি আবার কাজ করতে আমাকে এই পদ্ধতিটি স্ট্যাকওভারফ্লো.com/a/1479343/193634 ব্যবহার করতে হয়েছিল।
রোসদী কাসিম

আমি এটি আবার চেষ্টা করেছি এবং এটি ঠিক আছে। সম্ভবত আপনি যে সমাবেশটি উল্লেখ করেছেন / লোড করছেন না AssemblyInfoআপনি যা ভেবেছিলেন সাথে সাথে এতে রয়েছে contains
কির্ক ওল

ELMAH অ্যাপেন্ডার ব্যবহারকারীদের জন্য এটি যাওয়ার উপায়। আমার কাছে 'log4net.Config.XMLConfigurator.Configure () ছিল;' Global.asax.cs এ এবং এটি ফাইল অ্যাপেন্ডারের জন্য ঠিক কাজ করছে তবে ELMAH অ্যাপেন্ডারদের জন্য নয়।
ব্যবহারকারী 3885927

আমি এই উত্তরটি টিক দিয়েছি এবং এটির সাথে ak [সমাবেশ: log4net.Config.XMLConfigurator (দেখুন = সত্য)] twe
ডেভিড সেভেজ

49

আমি অনুমান করি যে হয় লগ 4 নেট মোটেই লগইন করছে না বা আপনি যেখানে আশা করবেন সেখানে ফাইলটি শেষ হচ্ছে না।

প্রথমত, আপনি আসলে ফোন করেছেন?

XmlConfigurator.Configure()

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

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


33

অন্য ছোট gotcha হয় নেই, এখানে দেখুন: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config

[assembly: log4net.Config.XmlConfigurator]পদ্ধতি app.config সঙ্গে কাজ করে না। আপনি যদি app.config থেকে log4net কনফিগার করেন তবে আপনাকে অবশ্যই এই log4net.Config.XmlConfigurator.Configure()পদ্ধতিটি ব্যবহার করতে হবে ।


কেবল রেকর্ডের জন্য, উভয় পদ্ধতিই কনসোল অ্যাপ্লিকেশনটিতে আমার জন্য কাজ করেছিল।
রেজিট

আমি উপরের সমাধানটি নিশ্চিত করেছি - আমাকে log4net.Config.XMLConfigurator.Configure (); আমার কোডে (যা log4net কার্যকরভাবে কাজ করতে app.config ব্যবহার করে effectively যে লাইনে কার্যকরভাবে মুদ্রিত হয় সেগুলি কনফিগার () পদ্ধতিটি কার্যকর করার পরে হয়
লুইসা রোসি

19

লগ 4 নেট যখন পুনরায় হিসাবরক্ষক হিসাবে প্রমাণিত হচ্ছে তার জন্য এখানে আমার চেকলিস্টটি রয়েছে:

  • নির্মাণের সময় লগ 4 নেট.কমফিগ ফাইলটি বিন \ ফোল্ডারে অনুলিপি করা হয়েছে তা নিশ্চিত করুন (সংকলকটিতে 'নতুন হলে অনুলিপি করুন' সেট করুন)
    • ইনস্টল কোডটির সাথে কাজ করার সময়, নিশ্চিত করুন যে লগ 4 নেট.কনফিগটি যাত্রার জন্য এসেছিল (সংকলনে 'বিষয়বস্তুতে সেট')
  • প্রক্রিয়াটি যে ফোল্ডারে লগগুলি লিখতে হবে সেখানে ফোল্ডারে লেখার অধিকার রয়েছে তা নিশ্চিত করুন
  • যদি সন্দেহ হয় তবে সি: \ টেম্পিয়াল to এ দু'দেশে অনুমতি দিন এবং সেখানে লগ ইন করার জন্য সমস্ত কিছু পান ()
  • এটি আপনাকে কিছু বলছে কিনা তা দেখতে সিসিনটার্নাল / ডিবিভিউ.অ্যাক্স ফায়ার করুন

3
"নির্মাণের সময় লগ 4 নেট.কমফিগ ফাইলটি বিন \ ফোল্ডারে অনুলিপি করা হয়েছে কিনা তা নিশ্চিত করুন (সংকলকটিতে 'নতুন করে কপি করুন' সেট করুন)" -> আমার দিনটি বাঁচান! এত কথা!
হোয়াং এনগুইন হুউ

8

একটি এএসপি.এনইটি এমভিসি প্রকল্পের জন্য

log4net.Config.XmlConfigurator.Configure();

Global.asax.cs এও সহায়তা করে:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        log4net.Config.XmlConfigurator.Configure();
    }
}

1
এটি নিয়ে একটি অত্যন্ত বিস্ময়কর সমস্যা ছিল, উত্পাদনে এবং আমার বসের কম্পিউটারে লগাররা এইভাবে ভাল কাজ করেছিল, তবে আমি কર્કের উত্তর না দেওয়া পর্যন্ত এটি আমার কম্পিউটারে কার্যকর হয়নি। কেবল ভেবেছি লোকেরা যদি তাদের অনুরূপ সমস্যা (এমভিসি প্রকল্প বিটিডব্লু) থাকে তবে আমি তাদের জানাতে চাই।
শেলবি 115

@ শেলবি ১১৫, অনেক অনেক ধন্যবাদ! আমি ELMAH এ আমার লগ 4 নেট এন্ট্রিগুলি দেওয়ার চেষ্টা করছিলাম। ওয়েবকনফাইগে আমার সবকিছু ঠিক ছিল। আমি ইতিমধ্যে 'log4net.Config.XMLConfigurator.Configure (); আমার Global.asax.cs এ তবে এটি কাজ করে না। এই এসও পোস্টে এসে কার্কের উপর ভিত্তি করে એસেম্বলিআইএনফো-র লাইন যুক্ত করেছেন। এটি এখনও কার্যকর হয়নি! আপনার মন্তব্য পড়ার পরে আমি Global.asax.cs থেকে পূর্বের এন্ট্রি মুছলাম এবং এটি কাজ শুরু করে। আমি এটিতে বেশ কয়েক ঘন্টা ব্যয় করেছি এবং আপনার মন্তব্যটি একটি বড় সহায়ক ছিল। আবার ধন্যবাদ!
ব্যবহারকারী 3885927

Global.asax.cs এ প্রবেশ ফাইল ফাইলের জন্য ভাল কাজ করছিল তবে ELMAH অ্যাপেন্ডারদের জন্য নয় ers কর্কের উপায় এলএএমএএএএচএইচএইচেন্ডারের জন্য কাজ করেছিল (আমি বিশেষ করে এটি گلوبل.এক্সএক্স.সি গঠন করতে হয়েছিল)
ব্যবহারকারী 3885927

আপনি এটিও নিশ্চিত করতে চাইতে পারেন যে লগ 4নেটের লগ ফাইলগুলির জন্য কনফিগার করা ডিরেক্টরিতে লেখার অনুমতি রয়েছে।
ওলাদিপো ওলেসেমো

@ শেলবি 115 ডাং, আপনি সমাধানটি ভুলে গেলে এবং আপনার নিজের মন্তব্যটি আপনার সমস্যার সমাধান করে তবে তা পছন্দ করবে। আপনার দ্বারা ইতিমধ্যে আপগ্রেটেড উত্তর সহ একটি পৃষ্ঠায় আসা খুব ভাল সূচক।
শেলবি 115

7

এইগুলি এমন পদক্ষেপ যা শেষ পর্যন্ত আমার ফাইল লগিংয়ের কাজ করে:

  • - চেক এসেম্বলিআইএনফো সি.এস-এ নিম্নলিখিত বৈশিষ্ট্য রয়েছে। [সমাবেশ: log4net.Config.XMLConfigurator] । এটি log4net লোড করে।
  • লগ ডিরেক্টরিতে লেখার অনুমতি রয়েছে তা পরীক্ষা করুন।
  • লগারের একটি বিন্যাস নির্দিষ্ট করা আছে তা পরীক্ষা করুন। আপনার কনফিগারেশনের প্রতিটি উপাদানটিতে একটি বিন্যাসের উপাদান নির্দিষ্ট রয়েছে তা পরীক্ষা করে এটি করা হয় । উদাহরণ:

<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>

  • অবশেষে, কনসোল লগিং সক্ষম করতে এবং কনসোলটি পরীক্ষা করতে log4net অভ্যন্তরীণ লগিং চালু করার চেষ্টা করুন। এটি করতে, <add key="log4net.Internal.Debug" value="true"/>আপনার যুক্ত করুন appSettings

<add key = "log4net.In આંતરિક .Debug" value = "true" /> এটি আমাকে সমস্যা সমাধানে সহায়তা করেছে। ধন্যবাদ
রবি খাম্বাটি

ডিরেক্টরিটির অনুমতিগুলি যা আমাকে পেয়েছিল
ওমর হিমাদা

6

আমার অভিজ্ঞতা আছে যেখানে লগিং সিস্টেমগুলি ব্যতিক্রম না বাড়িয়ে নিঃশব্দে ব্যর্থ হয়। আমি মনে করি এটি উপলব্ধি করে কারণ লগার যদি লগিং ত্রুটিগুলি করে থাকে তবে এটি কীভাবে কোনও ত্রুটি লগ করতে পারে যে এটি লগিং সম্পাদন করতে অক্ষম?

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

পরীক্ষার প্রয়োজনে আপনি ডিস্কে ম্যানুয়ালি ফাইলটি তৈরি করতে চান যাতে লেখা উচিত এবং প্রত্যেককে এটিতে লেখার জন্য অনুমতিগুলি খুলতে হবে। যদি লগার এটিতে লেখা শুরু করে তবে আপনি জানেন যে এটির অনুমতিটি কনফিগারেশন ভিত্তিক না হয়ে বরং ভিত্তি করে।


2

আমার পক্ষে, আমি অ্যাপ্লিকেশনটি সংকলন করার সময় কনফিগার ফাইলটি অনুলিপি করতে চিহ্নিত করেছি।

আউটপুট ডিরেক্টরিতে কনফিগার ফাইলটি অনুলিপি করুন

Log4net.config ফাইলটিতে ডান ক্লিক করুন, সম্পত্তি নির্বাচন করুন এবং তারপরে XXXX অনুলিপি হওয়ার জন্য আউটপুট ডিরেক্টরিতে অনুলিপি করুন


1

আমি উপরের সমস্ত চেষ্টা করেছিলাম কিন্তু কিছুই কার্যকর হয়নি। App.config এর configSections বিভাগে এই লাইনটি যুক্ত করা আমার পক্ষে কাজ করেছে।

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" />

এটি নিশ্চিত করুন Versionএবং PublicKeyTokenসঠিক


0
<param name="File" value="mylog.log" />

বলছে "প্রকৃত ফোল্ডারে mylog.log লিখুন"। এর অর্থ হ'ল যদি আপনার ওয়েব অ্যাপ্লিকেশন আইআইএস এর অধীনে থাকে তবে লগ সি: \ inetpub \ wwwroot name appname log mylog.log এ লেখা হবে।

যদি লগ ফাইলটি না থাকে তবে সম্ভবত যে অ্যাকাউন্টের অধীনে অ্যাপ চলছে সেগুলির ফোল্ডারে লেখার অনুমতি নেই। কোনও ফাইল লিখিত আছে কিনা তা দেখতে আপনি সিসইন্টার্নালগুলি থেকে প্রসেস মনিটর চালাতে পারেন।

কোনও ব্যতিক্রম ছোঁড়া হয়েছে কিনা তা দেখতে ডিবাগ মোডে ভিএস চালান (ডিবাগ-> ব্যতিক্রম-> সিএলআর ব্যতিক্রম, চেক নিক্ষেপ)।


0

আমার ক্ষেত্রে আমি লগ 4 নেট.কমফিগ ফাইলের বৈশিষ্ট্যগুলিকে "সামগ্রী" হিসাবে সেট করতে ভুলে গেছি যাতে ফাইলটি মোতায়েনের অন্তর্ভুক্ত ছিল না। সুতরাং এটি মনোযোগ দিন:

Compile action : Content

0

দুর্ভাগ্যক্রমে উপরের কেউ সাহায্য করেনি। পূর্ববর্তী সেটিংস পরামর্শগুলিতে অতিরিক্ত হিসাবে লগ ইন করা ক্লাসে সুস্পষ্ট কনফিগারেশন আমার জন্য কৌশলটি করেছিল।

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
log4net.Config.XmlConfigurator.Configure(new FileInfo(assemblyFolder + "/log4net.config"));

-7

এছাড়াও কয়েক ঘন্টা পরে, আমি বুঝতে পেরেছিলাম কেন এটি আমার জন্য কাজ করছে না ...

আমার ছিল:

public static class Program
{

    private static CommunicationManager _bcScanner = new CommunicationManager();
    private static ILog _log = LogManager.GetLogger(typeof(Program));
    private static SocketServer socketListener;

তবে এটি হওয়া উচিত:

public static class Program
    {
        private static ILog _log = LogManager.GetLogger(typeof(Program));
        private static CommunicationManager _bcScanner = new CommunicationManager();
        private static SocketServer socketListener;

সুতরাং নিশ্চিত করুন যে ILog প্রথম লাইনে রয়েছে ...


1
এটি অবশ্যই কারণ নয়। লগিং পদ্ধতিগুলিতে যেমন _ _ লগ.ইনফোতে কল করার আগে আপনি যতক্ষণ না এটি করেন ততক্ষণ আপনি আইলগ অবজেক্টটি আরম্ভ করার বিষয়টি বিবেচনা করে না; _ লগ.অররর ইত্যাদি
ওলাদেপো ওলেসেমো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.