繁体   English   中英

log4j 不读取 log4j.properties?

[英]log4j not reading log4j.properties?

我继承了一个 Mavenized Java / Tomcat 应用程序,但无法按预期进行日志记录。 这可能很明显,但就是这么说的 - 我是一个 Java 菜鸟。

问题似乎是 log4j 没有读取自己的配置文件 (log4j.properties)。 该文件在类路径中可用,并且(afaik)格式正确。

下面是我的 log4j.properties 文件。 为了它的价值,我从Mkyong 网站上的这篇文章中逐字复制了它,以防万一我原来的 .properties 文件格式不正确。

# Root logger option
log4j.rootLogger=DEBUG, 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/log4j.properties

父类中的记录器声明:

public class MyParentClass extends HttpServlet{
    protected static final String CHARSET = "UTF-8";
    static Logger logger = Logger.getLogger(MyParentClass.class);

这是调用 Logger/log4j 的代码。 根据log4j FAQ,类路径问题是 WAR 应用程序问题的常见来源,因此我确保该类能够加载资源 (log4j.properties) 并将其打印到 STDOUT。

public class MyChildClass extends MyParentClass {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //testing output
        System.out.println("SYSTEM.OUT.PRINTLN");
        logger.info("LOGGER.INFO");
        logger.debug("LOGGER.DEBUG");
        logger.trace("LOGGER.TRACE");
        logger.error("LOGGER.ERROR");
        logger.warn("LOGGER.WARN");

        // reading log4j.properties
        java.io.InputStream propertiesStream = this.getClass().getClassLoader().getResourceAsStream("log4j.properties");
        java.util.Scanner s = new java.util.Scanner(propertiesStream).useDelimiter("\\A");
        String result = s.hasNext() ? s.next() : "";

        // writing log4j.properties to stdout
        System.out.println("---CONTENTS OF log4j.properties---");
        System.out.println(result);
        System.out.println("---END CONTENTS---");

结果是 :

SYSTEM.OUT.PRINTLN
log4j:WARN No appenders could be found for logger (com.company.client.project.web.MyParentClass).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
---CONTENTS OF log4j.properties---
# Root logger option
log4j.rootLogger=DEBUG, 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
---END CONTENTS---

所有可见输出都来自显式System.out.println()调用。

另一个可能相关的数据点:log4j 附加程序错误消息(“找不到记录器的附加程序”)由于logger.error()调用而出现。 如果它被删除或评论,警告就会消失。

我还没有设置断点来逐步执行执行流程,因为代码运行在一个 vagrant 管理的 Ubuntu 机器上,而且我还没有配置我的 IDE 以进行 vagrant 调试。 现在正在处理这个问题,如果有任何变化,我会更新这个问题。 我一半希望答案是一些显而易见的事情,我只是由于缺乏经验而没有抓住。

有时 log4j 不会在 tomcat 启动时自动加载,只是因为服务器看不到 log4j 属性文件。 需要手动将 log4j 属性文件配置的路径设置为 java 选项或 eclipse 或 intellij VM 选项。 就我而言,我必须这样做(我在窗户上)

    -Dlog4j.configuration="file:D:\Users\Projets\api\WebContent\WEB-INF\config\log4j_dev.xml"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM