programing

logger(log4j)에 대한 추가 프로그램을 찾을 수 없습니다.

nicescript 2022. 7. 14. 21:33
반응형

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.properties클래스 패스

프로젝트가 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를 찾을 수 없고 응용 프로그램은 명시적 설정을 수행하지 않습니다.

하려면 , 작성.log4j.properties ★★★★★★★★★★★★★★★★★」log4j.xml클래스 경로상의 위치(보통 jar 파일과 동일)로 이동합니다.

설정 옵션: "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.properties솔러하다

#  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의 경우 파일을 위치에 ).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이치노Appender 、 a 、 is 、 a a a a a a에 입니다.Logger특정 타깃에 메시지를 씁니다.FileAppender 또는 파일에 ConsoleAppender콘솔에 씁니다.로거 어펜더 어펜더 어펜더 어펜더 어펜더.

Logger와 Appender의 상호 작용에 대한 자세한 내용은 튜토리얼을 참조하십시오.

속성 파일이 올바르게 설정되어 있는지 확인합니다.그리고 컴파일러가 속성 파일을 찾을 수 없는 것 같습니다.pom에서 다음과 같이 설정할 수 있습니다(maven project를 사용하는 경우에만).

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

같은 에러가 발생.이 에러 메세지의 원인이 되는 문제를 다음에 나타냅니다.

log4j를 설정하기 전에 Logger를 사용하는 개체를 만듭니다.

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

솔루션:메인 방법의 선두에 log4j를 설정합니다.

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

저는 JUnit 테스트 수업을 진행하려고 할 때도 같은 문제에 직면했습니다.

src/test/resources 폴더에 log4j.properties 파일을 수동으로 추가하면 문제가 해결됩니다.

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

첫 번째 코드로 다음을 추가합니다.

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

log4j jar 파일 또는 Java 코드가 log4j 컨피규레이션파일을 찾는 위치를 이해하셔야 합니다.

src/main/resources/log4j.properties이클립스 경로입니다.절대 경로를 코드로 하드 코딩할 필요가 없도록 적절한 위치에 배치하십시오.

해당 https://askyourquestions.info/how-to-see-where-the-log-is-logger-in-slf4j/에 대한 제 기사 및 샘플 솔루션을 읽어보십시오.

제 경우, 오류는 "additivity" 플래그였습니다.루트 프로젝트 패키지에 대해 "false"인 경우 하위 패키지에는 첨부자가 없고 "appender not found" 오류가 표시됩니다.

(RCP4에서) 이 문제가 발생할 수 있는 또 다른 이유는 타깃파일로 여러 로깅 프레임워크를 사용하고 있기 때문입니다.예를 들어 타겟파일 콘텐츠탭에서 slf4j, log4j 및 ch.qos.logback.slf4j의 조합을 사용하면 이 문제가 발생합니다.

모든 이 , Eclipse에 .Project - Clean - Clean

먼저 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>

인텔리주 12에 maven이 있는 실행 가능한 jar를 작성하려고 할 때 이 문제에 부딪혔습니다.Java 매니페스트 파일에는 클래스 경로가 포함되어 있지 않기 때문에 log4j 속성 파일을 루트 레벨(jar 파일이 실행된 곳)에서 찾을 수 없었습니다.

참고로 나는 로거를 이렇게 받았다.

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

그리고 다음과 같은 폼파일로 작업을 할 수 있었습니다.

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

프로젝트가 Eclipse에서 열려 있는지 확인한 다음 Eclipse 상단의 "실행" 메뉴를 클릭하고 다음을 클릭합니다.

  1. 달려.

  2. 설정 실행

  3. 클래스 패스(탭)

  4. 사용자 엔트리

  5. 오른쪽에 병을 추가하다

  6. log4j jar 파일 추가

  7. 적용합니다.

  8. 달려.

에러 메세지는 표시되지 않게 됩니다.

는 '어울리지 않다'라는 단어가 부족하기 때문일 수 있습니다.static다음 중 하나:

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

logger를 인스턴스 필드로 하면 바로 다음 경고가 표시됩니다.

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

설상가상으로 경고는 하지 말라는 것이다.ProcessorTest에러가 발생하고 있습니다만, 문제의 원인으로서 전혀 다른 클래스(송신자)에 송신됩니다.해당 클래스에 올바른 설정 로거가 있으므로 변경할 필요가 없습니다.몇 년 동안이나 문제를 찾을 수 있을 거야!

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>

이 경우 "resources" 디렉토리에 log4j2.xml이 정의되어 있으며 다음 항목에 의해 사용하도록 지정되었습니다.

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

Log4J는 Log4j Java 코드가 프로그램에서 첫 번째 로그 행을 생성하기 위해 검색 중일 때 이 경고 메시지를 표시합니다.

이 시점에서 Log4j는 2가지를 만듭니다.

  1. 하여 검색하다log4j.properties
  2. appender에서 정의를 하기 위해 합니다.log4j.properties

iflog4J 수 없다log4j.properties가 appender에서 log4j.rootlogger 않다log4j.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

file는 appender의 됩니다.log4j.rootlogger되어 있습니다.이 명령어는 UPER-CASEUPER-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에 .src/main/resourcesMAVEN의

은 Log4j.properties에 됩니다.target/classes더입니니다다

는 Log4를 합니다.log4j.properties에서 target/classes!

저도 이런 문제가 있었어요.IntelliJ IDEA에서 리소스 디렉토리를 표시하는 것을 잊었습니다.

  1. 디렉토리를 오른쪽 클릭합니다.
  2. 디렉토리를 로 표시
  3. 리소스 루트

저는 분명히 이유가 달랐고, 에러 메세지가 오해를 불러일으켰습니다.

my build.gradle에 이것만 있으면 로그의 선두에 slf4j가 없다고 불평할 수 있지만 포맷은 좋지 않지만 여전히 로그에 기록됩니다.

    compile 'log4j:log4j:1.2.17'

이 수 라는 에러 메시지가 는 "할 수 없습니다"로 되어 있는데, 이 에러 메시지가 "추가할 수 없습니다.src/main/java/log4j.properties:

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'

마지막으로, 다른 프로젝트에서 복사하여 추측한 의존관계를 다음과 같이 추가함으로써 문제가 해결되었습니다.

    compile 'log4j:log4j:1.2.17'
    compile 'org.slf4j:slf4j-log4j12:1.7.25'
    compile 'commons-logging:commons-logging:1.2'

왜 그랬는지 모르겠지만, 이걸로 되겠네요.그것에 대한 통찰력 있나요?

에서 이클립스를 찾을 수 .log4j.propertiesEclipse에서 JUnit 테스트를 실행할 때 파일이 다음 위치에 있더라도src/test/resources.

그 이유는 Eclipse(또는 m2e 커넥터)가 콘텐츠를 복사하지 않았기 때문입니다.src/test/resources된 출력 폴더 " " " "로 합니다.target/test-classes- 근본 원인은 Java Build Path -> Source 탭 -> 빌드 경로의 Source 폴더 -> src/test/Resources 아래에 있는 프로젝트의 속성에서 어떤 이유로 인해Excluded: **엔트리를 제외했습니다

으로 복사해 둘 .src/test/resources/log4j.properties로로 합니다.target/test-classes/log4j.properties.

iflog4j.properties는 패스에 앱에 전개하기 작성하기 Boot을 .Spring Boot은 .또한 이 파일을 생략하고 있습니다.web.xml되지 않습니다.spring boot autoconfigure를 으로 설정해야 .Log4j는 로그4j를 사용합니다.1.2 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...
}

java 빌드 패스에 log4j가 포함된 referent 프로젝트를 추가합니다.이클립스를 사용한 mahout 프로젝트에서 이 문제가 발생했을 때 mahout_h2o를 추가하면 효과가 있습니다.

많은 프로젝트와 함께 작업하면 스타일 문제에 직면할 수 있습니다.

* lof4j.properties 파일이 1개 필요합니다.이 파일에는 다른 프로젝트의 로그 속성이 포함되어 있습니다.

*프로젝트가 Linux OS로 동작할 때 log4j 속성 파일을 src 경로에 넣을 수 있습니다.다른 프로젝트의 libs와 log4.properties 파일은 클래스 경로 상의 한 폴더 아래에 배치할 수 있습니다.

첫 번째 Import:

 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

이 사이트의 솔루션은 https://crunchify.com/java-how-to-configure-log4j-logger-property-correctly/에서 사용할 수 있었습니다.log4j에서 경고가 전혀 표시되지 않게 되었다.

이것을 src/main/resources에 저장한 log4j.properties 파일에 넣습니다.

# 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

log4j JVM 인수 Dlog4j.configuration을 고려합니다.

일반적으로:

log4j 구성 파일을 가리키는 JVM 인수를 추가합니다.구문은 다음과 같습니다.

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. 작업 디렉토리, 상대 경로 및 클래스 경로에 주의하십시오.

언급URL : https://stackoverflow.com/questions/12532339/no-appenders-could-be-found-for-loggerlog4j

반응형