লগ 4j.properties ফাইলটি আমার কোথায় রাখা উচিত?


135

আমি একটি ওয়েব সার্ভিস প্রকল্প লিখেছিলাম নেটবীণ ans.7.১ ব্যবহার করে কাচফিশ v2.1 দিয়ে, log4j.properties প্রজেক্টের মূল ডাইরে রেখেছি এবং ব্যবহার করেছি:

static Logger logger = Logger.getLogger(MyClass.class);

কনস্ট্রাক্টর:

PropertyConfigurator.configure("log4j.properties");

এবং কার্যাদি:

logger.info("...");
logger.error("...");
// ...

তবে, এটি ত্রুটি সম্পর্কিত তথ্য (আসলে, আমি এটি উপলব্ধি করতে পারি এমন প্রায় প্রতিটি দির রাখার চেষ্টা করেছি):

log4j:ERROR Could not read configuration file [log4j.properties].
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:297)
        at org.apache.log4j.PropertyConfigurator.configure(PropertyConfigurator.java:315)
        at com.corp.ors.demo.OrsDemo.main(OrisDemo.java:228)
log4j:ERROR Ignoring configuration file [log4j.properties].
log4j:WARN No appenders could be found for logger (com.corp.ors.demo.OrsDemo).
log4j:WARN Please initialize the log4j system properly.

উদাহরণ প্রকল্পটি http://www.91files.com/?N3F0QGQPWMDGPBRN0QA8 থেকে পাওয়া যেতে পারে


2
প্রপার্টি কনফিগ্রেটার.কনফিগুরে ("log4j.properties") এর উদ্দেশ্য কী; লাইন? আমি এটিকে কখনই ব্যবহার করি না। আপনার লগ 4j.xML ফাইলটি অবশ্যই আপনার শ্রেণিপথের "কোথাও" থাকা উচিত।
এন্টোইন ক্লাভাল

1
stackoverflow.com/questions/1140358/... এটি কীভাবে log4j কনফিগারেশন নিজেই লগ করা হচ্ছে। আমি মনে করি এটি আপনাকে অনেকটা সহায়তা করতে পারে, কারণ কিছু পাত্রে তাদের নিজস্ব লগ 4 জে কনফিগারেশন রয়েছে।
ডিজে

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

উত্তর:


113

আমি জানি এই প্রশ্নের উত্তর দিতে কিছুটা দেরি হয়েছে, এবং সম্ভবত আপনি সমাধানটি ইতিমধ্যে খুঁজে পেয়েছেন তবে আমি যে সমাধানটি পেয়েছি তা পোস্ট করছি (আমি অনেকটা গুগল করার পরে) যাতে এটি সামান্য সাহায্য করতে পারে:

  1. এই থ্রেড হিসাবে পূর্বে উল্লিখিত প্রকল্পের WEB-INF \ শ্রেণীর অধীনে log4j.properties রাখুন।
  2. WEB-INF \ lib এর অধীনে log4j-xx.jar রাখুন
  3. লগ 4 জেনটি লোড করা হয়েছিল কিনা পরীক্ষা করুন: টমকেটের -Dlog4j.debugআপনার জাভা বিকল্পগুলির শেষে @ যুক্ত করুন

আশা করি এটি সাহায্য করবে।

rgds


অগ্রভাগে টমক্যাট পেতে 'রান' কমান্ডটি ব্যবহার করুন; আপনি কমান্ড লাইনের মাধ্যমে জাভা বিকল্পগুলিতে পাস করতে পারেন। এছাড়াও, বাশ করতে -x বিকল্পটি আপনার বিকল্পগুলির ঠিক কী ঘটে তা দেখতে দরকারী: JAVA_OPTS = -Dlog4j.debug বাশ -x
/usr/local/tomcat/bin/catalina.sh

50

যেমন ইতিমধ্যে বলা হয়েছে, log4j.properties ক্লাসপথের অন্তর্ভুক্ত একটি ডিরেক্টরিতে থাকা উচিত, আমি যুক্ত করতে চাই যে কোনও মভেনাইজড প্রকল্পে একটি ভাল জায়গা হতে পারে src/main/resources/log4j.properties


26

আপনি ভিএম যুক্তি -Dlog4j.configration = "ফাইল: / সি: / ওয়ার্কস্পেস 3/local/log4j.properties" দিয়ে কনফিগার ফাইলের অবস্থান নির্দিষ্ট করতে পারবেন


এটি ফাইল: / অথবা ফাইল: /// বা কোনও ইউনিক্স সিস্টেমে কেবল / পাথ / টু / ফাইল?
মরফিয়াস

উইন্ডোজের জন্য এটি কেবল ফাইল: /, আমি অনুমান করছি যে
ইউনিক্সটি

এটি ইমো একমাত্র উত্তর যা গ্রহণ করে যা একাধিক পরিবেশ গ্রহণ করে যা বিভিন্ন লগ স্তরের রয়েছে account
ম্যাট

ম্যাকোস-এ, লিবার্টি সার্ভারের jvm.options এ উদ্ধৃতি ব্যবহার করে এবং ফাইলটি ব্যবহার করবেন না: ///
wnm3

কেবলমাত্র একটি আপডেট যা কিছুটা হতাশাকে বাঁচাতে সাহায্য করতে পারে: আপনি লগ 4j2 ব্যবহার করছেন, যুক্তির নাম পরিবর্তন করা হয়েছেlog4j.configurationFile
ডান.এম ছিল ব্যবহারকারী 2321368

25

আপনাকে এটিকে মূল ডিরেক্টরিতে রাখতে হবে, এটি আপনার কার্যকর প্রয়োগের প্রসঙ্গে।

উদাহরণ:

    MyProject
       src
           MyClass.java
           log4j.properties

আপনি যদি অন্য কোনও প্রকল্প থেকে সম্পাদন শুরু করেন তবে আপনার সেই ফাইলটি প্রজেক্ট শুরু করার জন্য ব্যবহার করতে হবে। উদাহরণস্বরূপ, যদি কোনও ভিন্ন প্রকল্পের কিছু JUnit পরীক্ষা করে থাকে তবে এর লগ 4j.properties ফাইলও থাকা দরকার।


আমি log4j.properties এর পরিবর্তে log4j.xML ব্যবহার করার পরামর্শ দিই। আপনার আরও বিকল্প রয়েছে, আপনার আইডিই এবং এর থেকে সহায়তা পান ...


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

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

এটা কাজ করেছে ! তবে এটি অবাস্তব নয় ... এটি "রিসোর্স" ধরণের ফোল্ডারে আরও ভালভাবে স্থাপন করা হয়েছে বলে মনে করে।
অ্যাডামস.এইচ

17

কোনও মেভেন ভিত্তিক প্রকল্পের জন্য আপনার লগ 4j.properties এসসিআর / প্রধান / সংস্থানগুলিতে রাখুন। আর কিছু করার নেই!


এটিই, এবং ম্যাভেন প্রকল্পগুলিতে এক্সএমএল কনফিগারেশনের মতো অন্যান্য সম্পত্তি ফাইলগুলির ক্ষেত্রেও এটি একই। ধন্যবাদ!
রামন

13

আপনি যদি এসআরসি-র ভিতরে লগ 4j.properties রাখেন, আপনার বিবৃতিটি ব্যবহার করার দরকার নেই -

PropertyConfigurator.configure("log4j.properties");

সম্পত্তি ফাইলটি ক্লাসপথে থাকায় এটি স্বয়ংক্রিয়ভাবে নেওয়া হবে।


10

চেষ্টা করুন:

PropertyConfigurator.configure(getClass().getResource("/controlador/log4j.properties"));

9

ফাইলটি ওয়েব-আইএনএফ / ক্লাস ডিরেক্টরিতে থাকা উচিত। এই ডিরেক্টরি কাঠামো যুদ্ধ ফাইলের মধ্যে প্যাকেজ করা উচিত।


তাত্ত্বিকভাবে, এটি উত্তর, তবে সমস্যাটি লগ 4 জে glass প্রপার্টি লাস্ট করা হয় যখন গ্লাসফিশ যুদ্ধের ফাইল মোতায়েন করে।
মনো

3
এটি ওয়েবে-আইএনএফ / ক্লাসে থাকতে হবে এবং যুদ্ধের ফাইলের মধ্যে প্যাকেজ করা উচিত
মার্টিন ওকনোর

@ মোমো - কমপক্ষে ডাউনলোডযোগ্য সংরক্ষণাগারে ওয়েব / ওয়েবে-আইএনএফ / ক্লাসে কোনও লগ 4j.properties নেই। মার্টিন ঠিক আছে, সেখানেই এটি হওয়া উচিত।
fvu

কৌশলটি হ'ল, আপনি এটি আপনার সিআরসি ফোল্ডারে রেখেছেন (আপনার মূল উত্স ফোল্ডার) আপনার কোড তৈরির প্রক্রিয়াতে, ফাইলটি স্বয়ংক্রিয়ভাবে ক্লাস ফোল্ডারে স্থানান্তরিত হয় ...
মোস্তফা জেইনালি

7

আমার আইডিই নেটবিন্স। আমি ছবিগুলিতে দেখানো হয়েছে হিসাবে log4j.property ফাইল রেখেছি

মূল

প্রকল্পের মূল ফোল্ডার

ওয়েব

ওয়েব ফোল্ডার

ওয়েব-INF

ওয়েব-আইএনএফ ফোল্ডার

এই সম্পত্তি ফাইলটি ব্যবহার করার জন্য আপনার এই কোডটি লিখতে হবে:

package example;

import java.io.File;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import javax.servlet.*;
public class test {

public static ServletContext context;
static Logger log = Logger.getLogger("example/test");

public test() {

        String homeDir = context.getRealPath("/");
        File propertiesFile = new File(homeDir, "WEB-INF/log4j.properties");
        PropertyConfigurator.configure(propertiesFile.toString());
        log.info("This is a test");
    }
}

আপনি অন্য জেএসপি ফাইল থেকে স্থিতিশীল সার্ভলেট কনটেক্সট প্রসঙ্গটি সংজ্ঞায়িত করতে পারেন । উদাহরণ:

test.context = getServletContext(); 
test sample = new test(); 

এখন আপনি আপনার প্রকল্পগুলিতে log4j.property ফাইলটি ব্যবহার করতে পারেন।


5

ইতিমধ্যে সরবরাহ করা কয়েকটি প্রযুক্তিগতভাবে সঠিক নির্দিষ্ট উত্তরগুলি কিন্তু সাধারণভাবে এটি রানটাইম ক্লাসপথের যে কোনও জায়গায় থাকতে পারে, যেখানে যেখানেই জেভিএম দ্বারা ক্লাস চাওয়া হয়।

এটি আপনার ডিপ্লয়েড অ্যাপ্লিকেশনটিতে Eclipse এর / src দির বা WEB-INF / ক্লাস ডিরেক্টরি হতে পারে, তবে ক্লাসপাথ ধারণাটি এবং ফাইলটি কেন এতে স্থাপন করা হয়েছে তা সম্পর্কে সচেতন হওয়া ভাল, কেবল ওয়েবে-আইএনএফ / "ম্যাজিক" ডিরেক্টরি হিসাবে ক্লাস।


5

লগ 4j.properties ফাইলটি কেন দেখা যায় না তা বোঝার জন্য আমি অনেক সময় ব্যয় করেছি ।
তারপরে আমি লক্ষ্য করেছি যে এটি প্রকল্পের জন্য কেবল তখনই দৃশ্যমান ছিল যখন এটি মাইপ্রজেক্ট / লক্ষ্য / শ্রেণি / এবং মাইপ্রজেক্ট / এসআরসি / প্রধান / সংস্থান ফোল্ডার উভয় ক্ষেত্রেই ছিল ।
আশা করি এটি কারও কাজে লাগবে।
পিএস: প্রকল্পটি ছিল মাভেন-ভিত্তিক।


3

আমি দেখতে পেয়েছি যে ডিফল্টরূপে গ্লাসফিশ ডিফল্ট ওয়ার্কিং ডিরেক্টরি হিসাবে [গ্লাস ফিশ ইনস্টল অবস্থান] \ গ্লাসফিশ \ ডোমেনস [আপনার ডোমেন] \ দেখছে ... আপনি এই জায়গাতে লগ 4j.properties ফাইলটি ফেলে দিতে পারেন এবং সম্পত্তি কোডফিগ্রেটার ব্যবহার করে আপনার কোডটিতে এটি সূচনা করতে পারবেন পূর্বে উল্লিখিত হিসাবে ...

Properties props = System.getProperties();
System.out.println("Current working directory is " + props.getProperty("user.dir"));
PropertyConfigurator.configure("log4j.properties");

1

আমি জানি না এটি সঠিক উপায় ut তবে এটি আমার সমস্যার সমাধান করেছে। "প্রজেক্ট ফোল্ডার" / কনফিগারেশনে লগ 4j.properties ফাইলটি রাখুন এবং প্রপার্টি কনফিগুয়েরেটর.configure ("কনফিগারেশন // লগ 4j.properties") ব্যবহার করুন;

এটি আইডিই নিয়ে কাজ করবে তবে জার ফাইলটি নিজে চালানোর সময় নয়। যখন আপনি নিজের দ্বারা জার ফাইলটি চালান কেবল লগ 4j.properties ফাইলটিকে ফোল্ডারে অনুলিপি করুন যাতে জার ফাইলটি থাকে same


1

ক্লাসপথে log4j.properties রাখুন। এখানে 2 টি কেস যা আপনাকে যথাযথ অবস্থান সনাক্ত করতে সহায়তা করবে - ১. ওয়েব অ্যাপ্লিকেশনের জন্য ক্লাসপথটি হ'ল / ওয়েব-আইএনএফ / ক্লাস।

\WEB-INF      
    classes\
        log4j.properties
  1. প্রধান / ইউনিট পরীক্ষা থেকে পরীক্ষার জন্য শ্রেণিপথ হল সোর্স ডিরেক্টরি

    \Project\
       src\
          log4j.properties

1

এটি করার বিভিন্ন উপায় রয়েছে:

ওয়ে 1: আপনি প্রপার্টি কনফিগ্রেটার ব্যবহার না করে যদি মেন প্রকল্পে চেষ্টা করছেন

প্রথম: scr / main এ রিসোর্স ডিরেক্টরি অনুসন্ধান করুন

  if available,
       then: create a .properties file and add all configuration details.
  else
       then: create a directory named resources and a file with .properties     
write your configuration code/details.

স্ক্রিনশট অনুসরণ করে:

! [চিত্রের বিবরণ এখানে প্রবেশ করান

ওয়ে 2: আপনি জাভা / মাভেন প্রকল্পের জন্য প্রোপার্টি ফাইলের সাথে চেষ্টা করে দেখলে সম্পত্তিConfigurator ব্যবহার করুন

প্রকল্পে যে কোনও জায়গায় সম্পত্তি ফাইল রাখুন এবং সঠিক পথ দিন। বলুন: src / javaLog4jProperties / log4j.properties

স্ট্যাটিক {

 PropertyConfigurator.configure("src/javaLog4jProperties/log4j.properties");

}

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

ওয়ে 3: আপনি যদি জাভা / মাভেন প্রকল্পের এক্সএমএল দিয়ে চেষ্টা করছেন তবে ডমকনফিগ্রেটরটি ব্যবহার করুন

প্রকল্পের যে কোনও জায়গায় সম্পত্তি ফাইল রাখুন এবং সঠিক পথ দিন। বলুন: src / javaLog4jProperties / log4j.xML

স্ট্যাটিক {

 DOMConfigurator.configure("src/javaLog4jProperties/log4j.xml");

}

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


1

আপনার স্ট্যান্ডার্ড প্রজেক্টের সেটআপটিতে একটি প্রকল্প কাঠামোর কিছু থাকবে:

src/main/java
src/main/resources

আপনি রিসোর্স ফোল্ডারের ভিতরে log4j.properties স্থাপন করেন, যদি কোনও উপস্থিত না থাকে তবে আপনি সংস্থান ফোল্ডার তৈরি করতে পারেন


0

প্রকৃতপক্ষে, আমি এই সমস্যাটি কেবল একটি স্টারার্ড জাভা প্রকল্প কাঠামোয় নীচে অনুসরণ করেছি:

\myproject
    \src
    \libs
    \res\log4j.properties

Eclipse এ আমার পাথ তৈরির জন্য res ফোল্ডারটি যুক্ত করা দরকার, তবে, ইন্টেলিজ-এ, আমাকে লিঙ্কযুক্ত স্ক্রিনশট দেখায় যেমন resouces হিসাবে res ফোল্ডারটি চিহ্নিত করতে হবে: Res ফোল্ডারে ডান ক্লিক করুন এবং সংস্থান হিসাবে চিহ্নিত করুন


0

PropertyConfigurator.configure("log4j.properties");আপনার লগ 4 জে ক্লাসে আপনাকে নির্দিষ্ট করার দরকার নেই , যদি আপনি ইতিমধ্যে আপনার প্রকল্পের কাঠামোর মধ্যে log4j.properties সংজ্ঞায়িত করেছেন।

ওয়েব ডায়নামিক প্রকল্পের ক্ষেত্রে: -

ওয়েবকন্টেন্ট -> ওয়েব-ইনফ -> লগ 4j.properties এর অধীনে আপনার লগ 4j.properties সংরক্ষণ করতে হবে

আমি আশা করি এটি আপনাকে সাহায্য করতে পারে।

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