ไม่พบ appenders สำหรับ logger (log4j)?


369

ฉันใส่ log4j ใน buildpath ของฉัน แต่ฉันได้รับข้อความต่อไปนี้เมื่อฉันเรียกใช้แอปพลิเคชันของฉัน:

log4j:WARN No appenders could be found for logger (dao.hsqlmanager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

คำเตือนเหล่านี้หมายความว่าอย่างไร สิ่งที่ appender ที่นี่?


5
ดูเหมือนว่าจะเป็นการเตือนรันไทม์ คุณแน่ใจหรือว่าเห็นสิ่งนี้เมื่อคุณคอมไพล์?
maba

5
คุณลองไปที่ URL ในบรรทัดสุดท้ายของคำเตือนหรือไม่?
Jesper

4
ใช่!!! แต่มันไม่ได้พูดอะไรมากมาย ... ฉันพบว่าฉันต้องการไฟล์คุณสมบัติเพื่อกำหนดค่า appender ของฉัน!
maximus

แก้ไขไฟล์กำหนดค่าด้วยตนเองเพื่อเพิ่ม appender ตรวจสอบให้แน่ใจว่าคุณมีเอกสารการกำหนดค่าที่ถูกต้องและถูกต้อง
Roman C

ดูเพิ่มเติมที่log4j
PJTraill

คำตอบ:


464

คำแนะนำสั้น ๆ เกี่ยวกับคำแนะนำlog4jนี้ค่อนข้างเก่า แต่ก็ยังใช้ได้

คำแนะนำนั้นจะให้ข้อมูลบางอย่างเกี่ยวกับวิธีการใช้ตัวบันทึกและตัวต่อ


เพียงเพื่อให้คุณไปคุณมีสองวิธีง่ายๆที่คุณสามารถทำได้

วิธีแรกคือเพิ่มบรรทัดนี้ในวิธีการหลักของคุณ:

BasicConfigurator.configure();

วิธีที่สองคือการเพิ่มไฟล์นี้log4j.properties(นำมาจากคำแนะนำข้างต้น) ไปยัง classpath ของคุณ:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

3
แค่ก้าวแรกก็โอเค อ้างจากคำแนะนำสั้น ๆ เพื่อคู่มือ log4j
ray6080

65
สำหรับ stumble upons ใหม่ ... เพิ่มไฟล์ log4j.properties ไปยัง src / main / resources และนั่นคือสมมติว่าคุณมีโครงการ maven สิ่งที่อยู่ใน src / main / resources รวมอยู่ใน classpath
keni

3
ในการตั้งค่าโมดูลแนวคิดเปิด IntelliJ และเลือกโฟลเดอร์ทรัพยากรของคุณและคลิกทรัพยากรมันจะเพิ่มทุกทรัพยากรของคุณไปยัง classpath โดยอัตโนมัติ
Waqas

1
ไม่ช่วย ฉันใช้ Eclipse Neon สำหรับ C ++ และฉันวาง log4j.properties ไว้กับ eclipse ที่ปฏิบัติการได้และไม่ได้ช่วย
Nadav B

log4j.rootLogger=DEBUG, A1เป็นสายที่ฉันขาดหายไปตลอดเวลา
Mohammad Faisal

74

ดูเหมือนว่าคุณจะต้องเพิ่มตำแหน่งlog4j.propertiesไฟล์ของคุณไปยัง Classpath ใน Eclipse

ตรวจสอบให้แน่ใจว่าโครงการของคุณเปิดใน Eclipse จากนั้นคลิกที่เมนู "Run" ที่ด้านบนของ Eclipse และคลิกที่ต่อไปนี้:

  1. วิ่ง
  2. เรียกใช้การกำหนดค่า
  3. Classpath (แท็บ)
  4. รายการผู้ใช้
  5. ขั้นสูง (ปุ่มทางด้านขวา)
  6. เพิ่มโฟลเดอร์
  7. จากนั้นไปที่โฟลเดอร์ที่มีไฟล์ log4j.properties ของคุณ
  8. ใช้
  9. วิ่ง

ข้อความแสดงข้อผิดพลาดไม่ควรปรากฏขึ้นอีก


ข้อความเตือนไม่ปรากฏขึ้นตอนนี้ แต่ยังไม่มีการเขียนบันทึกในตำแหน่งที่ต้องการ
Arpan Saini

48

วิธีแก้ปัญหาอย่างรวดเร็ว:

  1. เพิ่มรหัสลงในฟังก์ชั่นหลัก :

    String log4jConfPath = "/path/to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
    
  2. สร้างไฟล์ชื่อ log4j.properties ที่/ path / to

    log4j.rootLogger=INFO, stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

วางไฟล์ log4j.properties ในไดเรกทอรีทรัพยากรเช่น src / test / resource
Alok

เพื่อหลีกเลี่ยงการประกาศที่ชัดเจนของเส้นทาง log4j.properties วางไว้ในโฟลเดอร์โครงการของคุณและเข้าถึงได้เช่น String log4jConfPath = System.getProperty ("user.dir") + File.separator + "log4j.properties";
Amimo Benja

36

นี่เป็นเพียงคำเตือน

แก้ไข

สิ่งนี้จะเกิดขึ้นเมื่อไฟล์การกำหนดค่าเริ่มต้นlog4j.propertiesและlog4j.xmlไม่สามารถหาได้และแอปพลิเคชันจะไม่ทำการกำหนดค่าที่ชัดเจน

ในการแก้ไขปัญหานั้นเพียงแค่สร้าง / คัดลอกlog4j.propertiesหรือlog4j.xmlลงในตำแหน่งของคุณบนclasspath (โดยปกติจะเหมือนกับไฟล์ jar)

เลือกตั้งค่าตัวเลือก -Dlog4j.configuration=file:///path/to/log4j.propertiesJava:

log4jใช้Thread.getContextClassLoader().getResource()เพื่อค้นหาไฟล์กำหนดค่าเริ่มต้นและไม่ได้ตรวจสอบระบบไฟล์โดยตรง การทราบตำแหน่งที่เหมาะสมในการวางlog4j.propertiesหรือlog4j.xmlต้องการความเข้าใจในกลยุทธ์การค้นหาของคลาสโหลดเดอร์ที่ใช้งานอยู่ log4jไม่ได้กำหนดค่าเริ่มต้นเนื่องจากการส่งออกไปยังคอนโซลหรือระบบไฟล์อาจถูกห้ามในบางสภาพแวดล้อม

แก้จุดบกพร่อง

สำหรับการดีบักคุณอาจลองใช้-Dlog4j.debug=trueพารามิเตอร์

การกำหนดค่าของ log4j.properties

ตัวอย่างการกำหนดค่าของlog4j.properties:

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN

นี่คือไฟล์กำหนดค่าอื่นที่ใช้ตัวต่อหลายตัว:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Apache Solr

ถ้าใช้Solrคัดลอก<solr>/example/resources/log4j.propertiesลงในตำแหน่งบนclasspath

ตัวอย่างการกำหนดค่าของlog4j.propertiesจาก Solr ไปเช่น:

#  Logging level
solr.log=logs/
log4j.rootLogger=INFO, file, CONSOLE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender

log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n

#- size rotation with log cleanup.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=4MB
log4j.appender.file.MaxBackupIndex=9

#- File to log to and log format
log4j.appender.file.File=${solr.log}/solr.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n

log4j.logger.org.apache.zookeeper=WARN
log4j.logger.org.apache.hadoop=WARN

# set to INFO to enable infostream log messages
log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF

ดูสิ่งนี้ด้วย:


13

คำตอบส่วนใหญ่ที่นี่แนะนำว่าlog4j.propertiesไฟล์ถูกวางไว้ในตำแหน่งที่ถูกต้อง (สำหรับโครงการ maven ควรอยู่ในsrc/main/resources)

แต่สำหรับฉันปัญหาคือว่าฉันlog4j.propertiesไม่ได้กำหนดค่าอย่างถูกต้อง นี่คือตัวอย่างที่เหมาะกับฉันคุณสามารถลองใช้ได้ก่อน

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1
ความจริงที่ว่า log4j พิจารณาว่า "ไม่สามารถหาไฟล์" และ "ข้อมูลจำเพาะที่ไม่สมบูรณ์ในไฟล์" เป็นข้อผิดพลาดเดียวกันคือตัวแก้ไขเวลา
Ed Norris

1
สำหรับฉันนี่คือคำตอบที่ดีที่สุด ฉันลงคะแนนแล้วและฉันได้เพิ่มคำอธิบายลงไปในคำตอบของคุณ
schlebe

คำตอบที่ดีที่สุดสำหรับฉัน !!!
nosequeweaponer

8

ตามที่อธิบายไว้ก่อนหน้านี้มี 2 วิธี

วิธีแรกคือเพิ่มบรรทัดนี้ในวิธีการหลักของคุณ:

BasicConfigurator.configure();

วิธีที่สองคือการเพิ่มไฟล์log4j.propertiesมาตรฐานนี้ใน classpath ของคุณ:

ในขณะที่ใช้วิธีที่สองคุณต้องแน่ใจว่าคุณเริ่มต้นไฟล์อย่างถูกต้องเช่น

Properties props = new Properties();
props.load(new FileInputStream("log4j property file path"));
props.setProperty("log4j.appender.File.File", "Folder where you want to store log files/" + "File Name");

ตรวจสอบให้แน่ใจว่าคุณสร้างโฟลเดอร์ที่ต้องการเพื่อจัดเก็บไฟล์บันทึก


ฉันมีปัญหาเดียวกันและฉันใช้ BasicConfigurator.configure (); ในวิธีการหลักและตอนนี้รหัสกำลังทำงานอย่างถูกต้อง
Surabhi Pandey

7

คุณใช้Loggerในรหัสของคุณเพื่อบันทึกข้อความ Appenderเป็นวัตถุผนวกกับLoggerการเขียนข้อความไปยังเป้าหมายที่เฉพาะเจาะจง มีFileAppenderการเขียนไปยังไฟล์ข้อความหรือConsoleAppenderเขียนไปยังคอนโซล คุณต้องแสดงรหัสของการตั้งค่า Logger และ Appender เพื่อขอความช่วยเหลือเพิ่มเติม

โปรดอ่านบทช่วยสอนเพื่อให้เข้าใจการโต้ตอบของ Logger และ Appender ได้ดียิ่งขึ้น


6

ตรวจสอบให้แน่ใจว่าตั้งค่าไฟล์คุณสมบัติอย่างถูกต้อง และอีกครั้งดูเหมือนว่าคอมไพเลอร์ไม่สามารถหาไฟล์คุณสมบัติคุณสามารถตั้งค่าดังต่อไปนี้ที่ pom (เฉพาะเมื่อคุณใช้โครงการ Maven)

<build>
       <sourceDirectory> src/main/java</sourceDirectory>
       <testSourceDirectory> src/test/java</testSourceDirectory>
        <resources>
             <resource>
                  <directory>resources</directory>
             </resource>
        </resources>           
</build >

นี้! ฉันใช้เวลาหลายชั่วโมงเพื่อค้นหาคำตอบ รหัสกรณีของฉันทำงานได้ดีใน Linux แต่มีข้อผิดพลาดนี้ใน windows (NB NB IDE เดียวกัน) และวิธีแก้ปัญหาทั้งหมดข้างต้นไม่ทำงาน!
Tiana987642

5

ฉันได้รับข้อผิดพลาดเดียวกัน นี่คือปัญหาที่นำไปสู่ข้อผิดพลาดนี้:

ฉันสร้างวัตถุบางอย่างที่ใช้ Logger ก่อนที่ฉันจะกำหนดค่า log4j:

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);

การแก้ไข: กำหนดค่า log4j ที่จุดเริ่มต้นในวิธีการหลัก:

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file

ขอบคุณมาก!!! ทุกคนแค่สมมติว่า Spring หรือ Tomcat หรืออะไรก็ตามที่จะเริ่มต้นการกำหนดค่า
Windgazer

3

ฉันคิดว่าคุณควรเข้าใจว่าไฟล์ jar4 ของ log4j หรือโค้ด Java ค้นหาไฟล์กำหนดค่า log4j ได้อย่างไร

src/main/resources/log4j.propertiesคือเส้นทาง Eclipse วางไว้ในตำแหน่งที่เหมาะสมเพื่อที่คุณจะได้ไม่ต้องใช้รหัสยากในเส้นทางที่แน่นอนในรหัส

อ่านบทความและตัวอย่างโซลูชันของฉันสำหรับ http://askyourquestions.info/2016/03/27/how-to-see-where-the-log-is-logger-in-slf4j/


3

เหตุผลอื่นที่อาจเกิดขึ้น (ใน RCP4) คือคุณกำลังใช้เฟรมเวิร์กการบันทึกหลายเฟรมในไฟล์เป้าหมายของคุณ ตัวอย่างนี้จะเกิดขึ้นหากคุณใช้การรวมกันของ slf4j, log4j และ ch.qos.logback.slf4j ในแท็บเนื้อหาไฟล์เป้าหมายของคุณ


3

เพิ่มต่อไปนี้เป็นรหัสแรก:

Properties prop = new Properties();
prop.setProperty("log4j.rootLogger", "WARN");
PropertyConfigurator.configure(prop);

2

ในกรณีของฉันข้อผิดพลาดคือการตั้งค่าสถานะ " additivity " หากเป็น "เท็จ" สำหรับคุณรูทแพ็กเกจโปรเจ็กต์แพ็กเกจชายด์จะไม่มี appender และคุณจะเห็นข้อผิดพลาด" appender not found "


2

ฉันประสบปัญหาเดียวกันเมื่อฉันพยายามเรียกใช้คลาสทดสอบ JUnit

ปัญหาได้รับการแก้ไขหลังจากฉันเพิ่มไฟล์ log4j.properties ในโฟลเดอร์ src / test / resources ด้วยตนเอง

การเพิ่มโค้ดด้านล่างลงในไฟล์ log4j.properties แก้ไขปัญหา:

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\logging.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

1

ฉันพบปัญหานี้เมื่อพยายามสร้าง jar ที่ปฏิบัติการได้ด้วย maven ใน intellij 12 ปรากฎว่าเนื่องจากไฟล์ java manifest ไม่ได้รวมคลาสพา ธ ไฟล์คุณสมบัติ log4j ไม่สามารถหาได้ในระดับราก (โดยที่ ไฟล์ jar ถูกเรียกใช้จาก)

FYI ฉันได้รับคนตัดไม้แบบนี้:

Logger log = LogManager.getLogger(MyClassIWantedToLogFrom.class);

และฉันสามารถทำให้มันทำงานกับไฟล์ pom ที่รวมสิ่งนี้:

         <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath> 
                        <mainClass>com.mycompany.mainPackage.mainClass</mainClass>
                    </manifest>
                    <manifestEntries>
                        <Class-Path>.</Class-Path> <!-- need to add current directory to classpath properties files can be found -->
                    </manifestEntries>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

1

ตรวจสอบให้แน่ใจว่าโครงการของคุณเปิดใน Eclipse จากนั้นคลิกที่เมนู "Run" ที่ด้านบนของ Eclipse และคลิกที่ต่อไปนี้:

  1. วิ่ง

  2. เรียกใช้การกำหนดค่า

  3. Classpath (แท็บ)

  4. รายการผู้ใช้

  5. เพิ่ม jar ทางด้านขวา

  6. เพิ่มไฟล์ log4j jar

  7. ใช้

  8. วิ่ง

ข้อความแสดงข้อผิดพลาดไม่ควรปรากฏขึ้นอีก


1

เหตุผลอาจมีstaticบางคำใน:

final static Logger logging = Logger.getLogger(ProcessorTest.class);

ถ้าฉันทำบันทึกอินสแตนซ์ของฟิลด์ฉันจะได้รับคำเตือนนี้มาก:

No appenders could be found for logger (org.apache.kafka.producer.Sender)

สิ่งที่แย่กว่านั้นคือคำเตือนไม่ได้ชี้ไปProcessorTestที่ที่ความผิดพลาดมีชีวิตอยู่ แต่ไปที่ระดับที่แตกต่างอย่างสิ้นเชิง (Sender) ซึ่งเป็นสาเหตุของปัญหา ว่าชั้นจะมีคนตัดไม้ชุดที่ถูกต้องและไม่จำเป็นต้องเปลี่ยนแปลงใด ๆ ! เราสามารถมองหาปัญหาสำหรับทุกวัย!


1

ฉันประสบปัญหาเดียวกันเมื่อฉันใช้ log4j2 ปัญหาของฉันเกิดจากการใช้ไลบรารีที่ไม่ถูกต้อง:

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <scope>runtime</scope>
    </dependency>

ฉันควรใช้:

<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <scope>runtime</scope>
    </dependency>

ในกรณีของฉันฉันมี log4j2.xml กำหนดไว้ในไดเรกทอรี "ทรัพยากร" ของฉันและระบุให้ใช้โดย:

System.setProperty("log4j.configurationFile", "log4j2.xml");

1

Log4J แสดงข้อความเตือนนี้เมื่อโค้ด Java Log4j กำลังค้นหาเพื่อสร้างบรรทัดบันทึกแรกในโปรแกรมของคุณ

ในขณะนี้ Log4j สร้าง 2 สิ่ง

  1. มันค้นหาเพื่อค้นหาlog4j.propertiesไฟล์
  2. มันค้นหาเพื่อยกตัวอย่าง appender ที่กำหนดใน log4j.properties

หากlog4Jไม่พบlog4j.propertiesไฟล์หรือหากlog4j.rootloggerไม่ได้กำหนดappender ที่ประกาศไว้ที่อื่นในlog4j.propertiesไฟล์ข้อความเตือนจะปรากฏขึ้น

ข้อควรระวัง: เนื้อหาของไฟล์ Properties ต้องถูกต้อง

เนื้อหาต่อไปนี้ไม่ถูกต้อง

log4j.rootLogger=file

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

เนื่องจากfileappender ถูกประกาศใน LOWER-CASE ในlog4j.rootloggerคำสั่งและกำหนดไว้ในคำสั่ง log4j.appender โดยใช้ UPPER-CASE!

ไฟล์ที่ถูกต้องจะเป็น

log4j.rootLogger=FILE

log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=c:/Trace/MsgStackLogging.log
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%m%n
log4j.appender.FILE.ImmediateFlush=true
log4j.appender.FILE.Threshold=debug
log4j.appender.FILE.Append=false

หากใช้ MAVEN คุณจะต้องวางไฟล์ log4j.properties ในsrc/main/resourcesและเริ่มสร้าง MAVEN

ไฟล์ Log4j.properties จะถูกคัดลอกในtarget/classesโฟลเดอร์

Log4J ใช้log4j.propertiesไฟล์ที่พบในtarget/classes!


1

ฉันมีปัญหานี้เช่นกัน ฉันลืมทำเครื่องหมายไดเรกทอรีทรัพยากรใน IntelliJ IDEA

  1. คลิกขวาที่ไดเรกทอรีของคุณ
  2. ทำเครื่องหมายไดเรกทอรีเป็น
  3. รากทรัพยากร

1

หากคุณกำลังใช้ Eclipse Project - Clean - Cleanและปัญหานี้ปรากฏออกมาจากที่ไหนหลังจากที่ทุกอย่างทำงานได้ดีก่อนลองไปที่


0

การติดตั้ง Eclipse ฉันไม่สามารถพบlog4j.propertiesเมื่อใช้JUnitsrc/test/resourcesทดสอบจากคราสแม้ว่าไฟล์นั้นถูกตั้งอยู่ที่

เหตุผลก็คือ Eclipse (หรือตัวเชื่อมต่อm2e ) ไม่ได้คัดลอกเนื้อหาจากsrc/test/resourcesไปยังโฟลเดอร์เอาท์พุทที่คาดไว้target/test-classes- สาเหตุหลักมาจากคุณสมบัติของโครงการภายใต้Java Build Path -> แท็บซอร์ส -> โฟลเดอร์ซอร์สบนพา ธบิลด์ -> src / ทดสอบทรัพยากร /อย่างใดมีExcluded: **รายการ ฉันลบรายการที่ยกเว้นแล้ว

หรือฉันจะได้คัดลอกด้วยตนเองเพื่อsrc/test/resources/log4j.propertiestarget/test-classes/log4j.properties


0

หากlog4j.propertiesอยู่ใน classpath แน่นอนคุณกำลังใช้ Spring Boot เพื่อสร้างไฟล์ WAR สำหรับการปรับใช้กับเซิร์ฟเวอร์แอพคุณจะไม่เห็นweb.xmlไฟล์ใด ๆ ที่สนับสนุน Autoconfigure ของ Spring Boot โดยอัตโนมัติและคุณไม่ได้รับข้อความบันทึกใด ๆ กำหนดค่า Log4j สมมติว่าคุณใช้ Log4j 1.2.x:

public class AppConfig extends SpringBootServletInitializer {

    public static void main( String[] args ) {
        // Launch the application
        ConfigurableApplicationContext context = SpringApplication.run( AppConfig.class, args );
    }

    @Override
    protected SpringApplicationBuilder configure( SpringApplicationBuilder application ) {
        InputStream log4j = this.getClass().getClassLoader().getResourceAsStream("log4j.properties");
        PropertyConfigurator.configure(log4j);
        return application;
    }

// Other beans as required...
}

0

อาจเพิ่มโครงการที่เกี่ยวข้องที่มี log4j ในเส้นทางสร้าง java ฉันเพิ่ม mahout_h2o ลงไปเมื่อพบปัญหานี้ในโครงการควานหาโดยใช้ eclipse มันทำงานได้!


0

หากคุณทำงานร่วมกับโครงการจำนวนมากคุณอาจประสบปัญหาสไตล์

* คุณต้องมีไฟล์ lof4j.properties หนึ่งไฟล์และไฟล์นี้จะรวมคุณสมบัติการบันทึกของโครงการอื่น

* นอกจากนี้คุณสามารถลองวางไฟล์คุณสมบัติ log4j ลงในพา ธ src เมื่อโปรเจ็กต์นั้นใช้งานได้กับ Linux OS, libs ของโปรเจ็กต์อื่น ๆ และไฟล์ log4.properties สามารถอยู่ภายใต้หนึ่งโฟลเดอร์ในตำแหน่งบน classpath


0

นำเข้าครั้งแรก:

 import org.apache.log4j.PropertyConfigurator;

จากนั้นเพิ่มรหัสด้านล่างลงในวิธีการหลัก:

String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);

สร้างไฟล์ที่พา ธ และเพิ่มรหัสด้านล่างลงในไฟล์นั้น

log4j.rootLogger=INFO, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} %p %c{2}: %m%n

0

วิธีการแก้ปัญหาในเว็บไซต์นี้ทำงานให้ฉันhttps://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/ ตอนนี้ฉันไม่เห็นคำเตือนเลยจาก log4j

ฉันใส่สิ่งนี้ลงในไฟล์ log4j.properties ที่ฉันใส่ไว้ใน src / main / resources

# This sets the global logging level and specifies the appenders
log4j.rootLogger=INFO, theConsoleAppender

# settings for the console appender
log4j.appender.theConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.theConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.theConsoleAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

0

ก่อนอื่น: สร้างไฟล์ log4j.properties

# Root logger option
log4j.rootLogger=INFO, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

วางไว้ใน src / main / resources /

หลังจากนั้นให้ใช้การพึ่งพา 2 นี้:

<dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>

มีความจำเป็นต้องเพิ่มการพึ่งพาขั้นสุดท้ายนี้ลงในไฟล์ POM:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.1.5.RELEASE</version>
        </dependency>

0

พิจารณาอาร์กิวเมนต์ log4j JVM Dlog4j.configuration

โดยทั่วไป:

เพิ่มอาร์กิวเมนต์ JVM ที่ชี้ให้เห็นไฟล์กำหนดค่า log4j ไวยากรณ์เป็นดังนี้:

java [ options ] -jar file.jar [ arguments ]

ตัวอย่างของบรรทัดคำสั่งจริงเหมือนดังต่อไปนี้:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2

สำหรับผู้ใช้ IntelliJ IDE:

1.Run/Debug Configurations
2.Edit configurations...
3.VM options
4.Enter the same value also starting with "-D"

เคล็ดลับ:

1. ผู้ใช้ Eclipse IDE จะค้นหาแนวทางที่เทียบเท่า

2. สำหรับเครื่องมือแก้ไขการกำหนดค่าการทำงาน / การดีบักอาจเป็นไปได้ว่าในตอนแรกไฟล์ปฏิบัติการที่คุณใช้งานไม่ได้อยู่ที่นั่น ขึ้นอยู่กับขนาดของโครงการที่คุณกำลังทำงานอยู่อาจเป็นเรื่องที่ไม่พึงประสงค์ที่จะนำทางไดเรกทอรีเพื่อค้นหา มันเป็นเรื่องยุ่งยากน้อยลงหากคุณเพียงแค่เรียกใช้ / เรียกใช้ไฟล์ (คลิกเล่น) หนึ่งครั้งก่อนที่จะดำเนินการเรียกใช้ / แก้ไขข้อบกพร่องไม่ว่าผลลัพธ์การดำเนินการจะเป็นอย่างไร

3. ให้ความสนใจกับไดเรกทอรีการทำงานเส้นทางสัมพัทธ์และ classpath


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.