Log4j在简单应用程序中找不到属性文件

qvsjd97n  于 2022-11-06  发布在  其他
关注(0)|答案(7)|浏览(119)

我有一个非常简单的应用程序来说明日志记录的功能。我使用log4j。但是我在设置上遇到了一些麻烦。我下载了文件log4j-1.2.16.jar。通过**Properties -〉Java Build Path -〉Libraries -〉Add External JAR...**将其连接到我的项目。下面是我的类:

package ru.log4j.log4jhelloworld;

import org.apache.log4j.Logger;

public class MyClass {
    private static final Logger logger = Logger.getLogger(MyClass.class);
    public static void main(String[] args) {
        logger.info("Hello World!");        
    }
}

我的log4j.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

  <appender name="console" class="org.apache.log4j.ConsoleAppender">
    <param name="Target" value="System.out"/>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="aa %p %c: %m%n"/>
    </layout>
  </appender>    
  <!--Root logger-->
  <root>
    <priority value ="debug" />
    <appender-ref ref="console" />
  </root>

</log4j:configuration>

还有我的log4j.properties

log4j.rootCategory=DEBUG, console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern= %p %c: %m%n

在控制台中显示这些异常:

log4j:WARN No appenders could be found for logger (ru.log4j.log4jhelloworld.MyClass).
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.xmllog4j.properties。并且确定它们是否需要?它们应该在什么目录下?我还应该注册什么?下面是我的项目结构
x1c 0d1x。
我猜这里面的错误。我的问题是什么?请帮帮我!

iq0todco

iq0todco1#

要解决您的问题,请将您的log4j配置文件(即log4j.xmllog4j.properties)放在src文件夹中,它应该可以正常工作。
此外,您不需要两个文件(log4j.xmllog4j.properties),只需使用其中一个。

smdnsysy

smdnsysy2#

问题是记录器系统找不到您的配置文件。要解决此问题,您有以下几种选择:

  • 如果您需要将logger配置保存在打包的类之外(通常在真实的生产系统中这样做),那么
  • 将记录器配置文件放在类路径之外的文件系统上(例如/etc/my_great_app/log4j.xml
  • 在Java应用程序命令行中包含配置的路径,如-Dlog4j.configuration=<path log4j config>,例如-Dlog4j.configuration=file:///etc/my_great_app/log4j.xml。请注意,路径必须包含前缀file://
  • 如果您希望将log4j配置与代码沿着保存(这对于单元测试来说是很典型的),那么您所需要做的就是-确保log 4 config位置是类路径的一部分。

关于log4j.propertieslog4j.xml之间的区别。它们只是两种不同的方式来定义log4j日志记录器的相同配置。你不需要两个文件,只要决定你更喜欢的格式并使用它:)

wgx48brx

wgx48brx3#

使用-Dlog4j.debug VM参数运行应用程序,系统将提示您log4j希望它位于的位置。

ycggw6v2

ycggw6v24#

log4j.properties 文件放在src文件夹中,文件如下所示

com.org.slk.LogExample.java
com.org.slk.log4j.properties

然后在www.example.com中设置属性配置器LogExample.java

PropertyConfigurator.configure(LogExample.class.getResourceAsStream("log4j.properties"));

和属性文件设置配置,如下面的log4j.properties


# Root logger option

log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console

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

# Redirect log messages to a log file

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File= fullpath /myLog.log
log4j.appender.file.MaxFileSize=5MB
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
pes8fvy9

pes8fvy95#

我也遇到过类似的问题。我通过在RunAS--〉RunConfigurations--〉Arguments选项卡中放置以下行来解决这个问题
-Dcvp.property.path=/home/local/Project/property/--〉属性文件位置
谢谢你!

mwngjboj

mwngjboj6#

您可以将log4j.properties文件保存在项目中的任何位置。然后加载您的文件

private static Logger logger = null;

static {
    System.setProperty("log4j.configurationFile", "C:\\Users\\jhaas\\Workspace_3.0.30\\RestClient\\conf\\log4j.properties");
}

这类似于在eclipse中设置VM参数,如
-Dlog4j.configurationFile= "C:\\Users\\jhaas\\Workspace_3.0.30\\RestClient\\src\\main\\resources\\log4j.properties"
更好的方法是将其放在代码中,而不是设置到eclipse VM参数中。

dy2hfwbg

dy2hfwbg7#

log4j.xmllog4j.properties文件应位于源文件夹src/main/resources根目录下
创建一个新的源文件夹src/main/resources,并将propertyxml文件放在那里。

相关问题