Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 找不到记录器(log4j)的附加器?_Java_Eclipse_Log4j - Fatal编程技术网

Java 找不到记录器(log4j)的附加器?

Java 找不到记录器(log4j)的附加器?,java,eclipse,log4j,Java,Eclipse,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放在我的构建路径中,但是当我运行我的应用程序时,我得到以下消息:

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是什么?

您可以使用代码中的
记录器来记录消息。
Appender
是附加到
Logger
的对象,用于将消息写入特定目标。有
FileAppender
写入文本文件,也有
consoleApender
写入控制台。您需要显示记录器和Appender设置的代码以获得更多帮助

请阅读以更好地理解记录器和附加器的交互作用。

本指南有点旧,但仍然有效

该指南将为您提供有关如何使用记录器和附加器的一些信息


为了让你走下去,你可以采取两种简单的方法

第一种方法是将这一行添加到主方法中:

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file
BasicConfigurator.configure();
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);
BasicConfigurator.configure();
第二种方法是将这个标准的
log4j.properties
(取自上述指南)文件添加到类路径中:

#将根记录器级别设置为DEBUG,并将其唯一的附加器设置为A1。
log4j.rootLogger=DEBUG,A1
#A1被设置为ConsolePender。
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#A1使用图形布局。
log4j.appender.A1.layout=org.apache.log4j.patternalyout
log4j.appender.A1.layout.ConversionPattern=%-4r[%t]-5p%c%x-%m%n

我得到了同样的错误。以下是导致此错误消息的问题:

在配置log4j之前,我创建了一些使用记录器的对象:

Logger.getLogger(Lang.class.getName()).debug("Loading language: " + filename);
解决方案: 在main方法的开头配置log4j:

PropertyConfigurator.configure(xmlLog4JConfigFile); 
// or BasicConfigurator.configure(); if you dont have a config file
BasicConfigurator.configure();
String log4jConfPath ="path to/log4j.properties";
PropertyConfigurator.configure(log4jConfPath);

看起来您需要在Eclipse中将
log4j.properties
文件的位置添加到类路径中


确保您的项目在Eclipse中处于打开状态,然后单击Eclipse顶部的“运行”菜单并单击以下内容:

java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2
  • 运行配置
  • 类路径(选项卡)
  • 用户条目
  • 高级(右侧按钮)
  • 添加文件夹
  • 然后导航到包含log4j.properties文件的文件夹
  • 申请
  • 错误消息不应再出现。

    快速解决方案:

  • 将代码添加到主功能中:

    String log4jConfPath = "/path/to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
    
  • /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
    

  • 我在Intellij12中尝试用maven构建可执行jar时遇到了这个问题。事实证明,由于java清单文件不包含类路径,因此在根级别(执行jar文件的地方)找不到log4j属性文件

    仅供参考,我得到的记录器如下:

    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>
    
    
    maven汇编插件
    2.2-β-5
    真的
    com.mycompany.mainPackage.mainClass
    . 
    带有依赖项的jar
    组装
    包裹
    单一的
    
    如前所述,有两种方法

    第一种方法是将这一行添加到主方法中:

    PropertyConfigurator.configure(xmlLog4JConfigFile); 
    // or BasicConfigurator.configure(); if you dont have a config file
    
    BasicConfigurator.configure();
    
    String log4jConfPath ="path to/log4j.properties";
    PropertyConfigurator.configure(log4jConfPath);
    
    第二种方法是将此标准log4j.properties文件添加到类路径:

    在采用第二种方法时,您需要确保正确初始化文件, 例如


    确保您创建了存储日志文件所需的文件夹。

    这只是一个警告

    固定 当无法找到默认配置文件
    log4j.properties
    log4j.xml
    且应用程序未执行显式配置时,会发生这种情况

    要解决这个问题,只需将
    log4j.properties
    log4j.xml
    创建/复制到类路径上的a位置(通常与jar文件相同)

    可选设置java选项:
    -Dlog4j.configuration=file:///path/to/log4j.properties

    log4j
    使用
    Thread.getContextClassLoader().getResource()
    定位默认配置文件,而不直接检查文件系统。要知道放置
    log4j.properties
    log4j.xml
    的适当位置,需要了解正在使用的类加载器的搜索策略
    log4j
    不提供默认配置,因为在某些环境中可能禁止向控制台或文件系统输出

    调试 对于调试,您可以尝试使用
    -Dlog4j.debug=true
    参数

    log4j.属性的配置
    log4j.属性的示例配置

    # 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
    
        compile 'log4j:log4j:1.2.17'
        compile 'org.slf4j:slf4j-log4j12:1.7.25'
    
    下面是另一个使用多个附加器的配置文件:

    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,请将
    /example/resources/log4j.properties
    复制到类路径上的一个位置

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

    另见:


    确保您的项目在Eclipse中打开,然后单击Eclipse顶部的“运行”菜单并单击以下内容:

    java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2
    
  • 运行配置

  • 类路径(选项卡)

  • 用户条目

  • 在右边添加jar

  • 添加log4jjar文件

  • 申请


  • 错误消息应该不再出现。

    我认为您应该了解log4j jar文件或Java代码在哪里查找log4j配置文件

    src/main/resources/log4j.properties
    是Eclipse路径。 把它们放在适当的地方
     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
    
    # 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.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
    
    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
    
    # 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
    
    # 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
    
    <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>
    
    <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>5.1.5.RELEASE</version>
            </dependency>
    
    java [ options ] -jar file.jar [ arguments ]
    
    java -Dlog4j.configuration=conf/log4j.xml -jar myJarFile.jar myArg1 myArg2
    
    1.Run/Debug Configurations
    2.Edit configurations...
    3.VM options
    4.Enter the same value also starting with "-D"
    
        compile 'log4j:log4j:1.2.17'
    
        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'