【问题标题】:Log4J not working properly?Log4J 无法正常工作?
【发布时间】:2014-05-12 16:26:09
【问题描述】:

我是 Log4J 的新手。我正试图让这个记录器工作。我下载了 .JAR 文件,并将其构建到引用库中,可以打开文件夹并在其中查看。所以我认为它已内置到我的项目中。

我认为我错过了如何声明记录器以便我可以在下面使用它。我从 stackoverflow 获得的一些代码。

问题:我遗漏了 Log4J 声明的哪一部分,以便在我的简单示例中将其用作记录器?

代码:

import java.io.*;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class TestLogs {
    private static Logger logger = Logger.getLogger(FileChooserDemo.class.getName());

    FileHandler fh;   

    public TestLogs() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
            fh = new FileHandler("C:\\Users\\itpr13266\\Desktop\\MyNewLogFile.log");   
            logger.addHandler(fh);
            logger.info("Logging an INFO-level message");
            logger.warning("Your file cannot be written!!");
        } catch (Exception ex) {
            Logger.getLogger(FileChooserDemo.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void LogTester() {
         Logger.getRootLogger().getLoggerRepository().resetConfiguration();
         ConsoleAppender console = new ConsoleAppender(); //create appender
          //configure the appender
          String PATTERN = "%d [%p|%c|%C{1}] %m%n";
          console.setLayout(new PatternLayout(PATTERN)); 
          console.setThreshold(Level.FATAL);
          console.activateOptions();
          //add appender to any Logger (here is root)
          Logger.getRootLogger().addAppender(console);

          FileAppender fa = new FileAppender();
          fa.setName("FileLogger");
          fa.setFile("mylog.log");
          fa.setLayout(new PatternLayout("%d %-5p [%c{1}] %m%n"));
          fa.setThreshold(Level.DEBUG);
          fa.setAppend(true);
          fa.activateOptions();

          //add appender to any Logger (here is root)
          Logger.getRootLogger().addAppender(fa)    
    }

    public static void main(String[] args) {
       TestLogs tls = new TestLogs();
       tls.LogTester();
     }
}

新图像-我重建了路径并将它们放在文件结构中略有不同的位置。但错误仍然存​​在。

有效的代码 --- 但是我如何将它记录到我计算机上的文本文件中。

package TestMenu;

import org.apache.log4j.*;

import javax.swing.*;

public class TestLogs {
    private static Logger logger = Logger.getLogger(TestLogs.class.getName());

    public TestLogs() {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        } catch (Exception ex) {
        }
    }

    private void LogTester() {
         logger.info("It works");
         TestLogs tls = new TestLogs();
    }

    public static void main(String[] args) {
       TestLogs tls = new TestLogs();
       tls.LogTester();
     }
}

至少 log4j 正在工作,但是如何更改属性文件以便我可以记录所有警告、信息和文件而不是控制台?

Log4j 属性:

# 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

新图像 -- 不工作 -- 底部显示错误

错误:

log4j:WARN No appenders could be found for logger (TestMenu.TestLogs).
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.jar
  • 好的,我不确定如何添加文件追加器。
  • 在我的回答中检查更新的 log4j.properties
  • 确实,在我的文件中更改了它。我仍然得到一个错误。上面在我的示例中列出。
  • 这意味着由于某种原因它没有获取 log4j.properties 文件。通常一个干净的构建可以解决这个问题。

标签: java log4j


【解决方案1】:

您正在尝试使用 java util 日志记录而不是 log4j。 你需要导入

import org.apache.log4j.Logger;

我发现您的代码中的另一件事是错误的

改变这个:

private static Logger logger = Logger.getLogger(FileChooserDemo.class.getName());

收件人

private static Logger logger = Logger.getLogger(TestLogs.class.getName());

这是一个示例

package com.vkg;

import org.apache.log4j.Logger;

public class TestLogs {
    private static Logger logger = Logger.getLogger(TestLogs.class.getName());

    public static void main(String[] args) {
        logger.info("It works");
        TestLogs tls = new TestLogs();
    }
}

一个基本的 log4j 配置文件

  # Root logger 
log4j.rootLogger=INFO, file, stdout

# Write to file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=[sompath to your log file e.g. C:\\mylog.log]
log4j.appender.file.MaxFileSize=50MB
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

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

并输出

2014-05-12 13:18:01 INFO  TestLogs:9 - It works

下图显示了 log4j.properties 的保存位置

【讨论】:

  • 它不喜欢我的导入,但文件在那里。我会在上面的问题中放一张图片。
  • 我还更新了图像以显示我的 log4j.jar 所在的位置。我建议尝试做一个项目 > clean > build from eclipse 看看是否能解决你的问题。或者我可以做的另一件事是确保你在 eclipse 中的构建路径是好的,并且那个 jar 确实存在。右键单击您的项目转到属性 > Java 构建路径 > 库确保每件东西在那里看起来都很好并且没有错误。
  • 您是否尝试删除 java.util.logging 导入。我会建议尝试删除这些。
【解决方案2】:

您应该导入 org.apache.log4j.Logger,而不是从 java.util.logging 导入任何内容。

【讨论】:

  • 那是 Java 提供的另一个记录器。你能提供一个代码示例来说明这一切所需的一切吗?
  • 如何添加logger文件的文件位置以及appender呢?
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-01
  • 2013-04-16
  • 1970-01-01
  • 2016-09-01
相关资源
最近更新 更多