[java] logger (log4j)에 대한 어 펜더를 찾을 수 없습니까?

log4j를 빌드 경로에 넣었지만 애플리케이션을 실행할 때 다음 메시지가 표시됩니다.

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.

이 경고는 무엇을 의미합니까? 어 펜더는 무엇입니까?



답변

log4j 안내서에 대한 이 짧은 소개 는 약간 오래되었지만 여전히 유효합니다.

이 안내서는 로거 및 어 펜더 사용 방법에 대한 정보를 제공합니다.


당신이 갈 수 있도록 두 가지 간단한 접근 방식이 있습니다.

첫 번째는이 줄을 기본 메소드에 추가하는 것입니다.

BasicConfigurator.configure();

두 번째 방법은 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


답변

log4j.propertiesEclipse의 클래스 경로에 파일 위치를 추가 해야하는 것처럼 보입니다 .

프로젝트가 Eclipse에서 열려 있는지 확인한 다음 Eclipse 맨 위에있는 “실행”메뉴를 클릭하고 다음을 클릭하십시오.

  1. 운영
  2. 구성 실행
  3. 클래스 패스 (탭)
  4. 사용자 항목
  5. 고급 (오른쪽 버튼)
  6. 폴더 추가
  7. 그런 다음 log4j.properties 파일이 포함 된 폴더로 이동하십시오.
  8. 대다
  9. 운영

오류 메시지가 더 이상 나타나지 않아야합니다.


답변

빠른 솔루션 :

  1. 주요 기능 에 코드 추가 :

    String log4jConfPath = "/path/to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
  2. / path / to에 log4j.properties라는 파일을 작성하십시오.

    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하고 log4j.xml찾을 수없는 응용 프로그램이 수행하는 명시 적으로 구성.

이 문제를 해결하려면 클래스 경로 의 위치 (일반적으로 jar 파일과 동일)를 작성 / 복사 log4j.properties하거나 작성 log4j.xml하십시오 .

선택적으로 java 옵션을 설정하십시오 -Dlog4j.configuration=file:///path/to/log4j.properties.

log4jThread.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

아파치 솔러

Solr을 사용 <solr>/example/resources/log4j.properties하는 경우 클래스 경로 의 위치로 복사 하십시오 .

log4j.propertiesSolr 의 샘플 구성 은 다음과 같습니다.

#  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

또한보십시오:


답변

여기에있는 대부분의 답변은 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


답변

앞에서 설명한 것처럼 두 가지 접근 방식이 있습니다

첫 번째는이 줄을 기본 메소드에 추가하는 것입니다.

BasicConfigurator.configure();

두 번째 방법은이 표준 log4j.properties 파일을 클래스 경로 에 추가 하는 것입니다.

두 번째 방법을 사용하는 동안 파일을 올바르게 초기화해야합니다 (예 :

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");

로그 파일을 저장하는 데 필요한 폴더를 작성하십시오.


답변

Logger코드에서를 사용하여 메시지를 기록합니다. 는 AppenderA와 추가 된 객체입니다 Logger특정 대상에 메시지를 작성 할 수 있습니다. 있습니다 FileAppender텍스트 파일이나에 쓰기ConsoleAppender 콘솔에 기록 할 수 있습니다. 도움이 필요하면 Logger 및 Appender 설정 코드를 표시해야합니다.

Logger와 Appender의 상호 작용에 대한 이해를 돕기 위해 학습서 를 읽으십시오 .