Java Maven log4j-找不到记录器的附加器

Java Maven log4j-找不到记录器的附加器,java,maven,log4j,Java,Maven,Log4j,我知道以前有人问过这个问题,但我找不到一个干净的解决办法。在我决定修改pom.xml之前,一切都很正常 这就是我所做的 我在pom.xml中修改了资源文件的目标目录。当我将项目构建到jar文件中时,我希望资源文件与jar(即:RootProjDir/target)位于同一目录中,而不是位于RootProjDir/target/classes 在执行jar文件时,出现以下错误: java -jar RootProjDir.jar log4j:WARN No appenders could be

我知道以前有人问过这个问题,但我找不到一个干净的解决办法。在我决定修改pom.xml之前,一切都很正常

这就是我所做的

我在pom.xml中修改了资源文件的目标目录。当我将项目构建到jar文件中时,我希望资源文件与jar
(即:RootProjDir/target)
位于同一目录中,而不是位于
RootProjDir/target/classes

在执行jar文件时,出现以下错误:

java -jar RootProjDir.jar 
log4j:WARN No appenders could be found for logger (org.Main).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
我在网上找到了一个解决方案,但在main()中设置log4j.properties文件目录似乎不是一个干净的解决方案:

我该怎么办

参考资料:


  • 您可以定义系统属性-Dlog4j.configuration并设置配置文件的路径。还可以使用-Dlog4j.debug进行调试

    例如(注意您应该使用绝对路径):
    -Dlog4j.configuration=file:///C:/log4j.properties

    这似乎是重复的是问题是相同的,但解决方案不是。当我使用BasicConfigurator.configure()时,它只记录到终端,而不记录到文件中。我想记录文件和终端。如果你仔细阅读我的问题,我不想使用PropertyConfiguration。还有其他解决方法吗?我相信您是想在终端中运行时以这种方式使用它的
    java-jar-Dlog4j.configuration=log4j.properties RootProjDir.jar
    它不起作用,您应该使用文件的绝对路径。例如,
    -Dlog4j.configuration=file://C:/log4j.properties
    。若不能使用绝对路径,那个么配置文件必须在类路径中。忘记了路径中的一个斜杠。检查更新的答案。还可以尝试调试模式来查看发生了什么。使用绝对路径是垃圾。相对路径的解决方案是什么?
    # output log to console and logfile 
    log4j.rootLogger=DEBUG, file, stdout
    
    # Direct log messages to a log file
    log4j.appender.file=org.apache.log4j.RollingFileAppender
    log4j.appender.file.File=/Users/nuttynibbles/Documents/workspace/javaWorkspace/RootProjDir/rootproj.log
    log4j.appender.file.MaxFileSize=10MB
    log4j.appender.file.MaxBackupIndex=1
    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
    
    java -jar RootProjDir.jar 
    log4j:WARN No appenders could be found for logger (org.Main).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
    
    public static void main(String[] args) {
    // This will tell log4j to read the log4j.properties in RootProDir/target
    PropertyConfigurator.configure(System.getProperty("user.dir") + "/log4j.properties"); 
    
    }