Java Log4J 工作不正常?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/23614191/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Log4J not working properly?
提问by Doug Hauf
I am new to Log4J. i am trying to get this logger to work. i downloaded the .JAR file and I have built that into the Referenced Libraries and can open the folder and see it in there. So I think it is built into my project.
我是 Log4J 的新手。我试图让这个记录器工作。我下载了 .JAR 文件,并将其构建到引用库中,可以打开文件夹并在其中查看。所以我认为它内置于我的项目中。
I think that I am missing how to declare the logger so that i can use it below. Some of the code I got from stackoverflow.
我想我缺少如何声明记录器以便我可以在下面使用它。我从stackoverflow获得的一些代码。
Question: Which part of the Log4J declaration am I missing so that I can use it as a logger in my simple example?
问题:我遗漏了 Log4J 声明的哪一部分,以便在我的简单示例中将其用作记录器?
Code:
代码:
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();
}
}
new image- I rebuilt the paths and it put them in a slightly different position in the file structure. But the error still persists.
新图像 - 我重建了路径,并将它们放在文件结构中略有不同的位置。但错误仍然存在。
Code that works --- But how do I log it to a text file on my computer.
有效的代码 --- 但是我如何将它记录到我计算机上的文本文件中。
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();
}
}
At least the log4j is working but how to change the properties file around so that I can log all warnings, info and to a file not to the console?
至少 log4j 正在工作,但是如何更改属性文件以便我可以将所有警告、信息和文件记录到一个文件而不是控制台?
Log4j Properties:
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
new image -- not working -- error shown on bottom
新图像——不工作——底部显示错误
Errors:
错误:
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.
采纳答案by vkg
You are trying to use java util logging not log4j. you need to import
您正在尝试使用 java util logging 而不是 log4j。你需要导入
import org.apache.log4j.Logger;
Another thing I see that is wrong in your code is
我在您的代码中看到的另一件事是
change this:
改变这个:
private static Logger logger = Logger.getLogger(FileChooserDemo.class.getName());
To
到
private static Logger logger = Logger.getLogger(TestLogs.class.getName());
Here is a sample
这是一个示例
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();
}
}
A basic log4j config file
一个基本的 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
And output
和输出
2014-05-12 13:18:01 INFO TestLogs:9 - It works
Image below shows where to keep log4j.properties
下图显示了保存 log4j.properties 的位置
回答by gatkin
You should be importing org.apache.log4j.Logger
, and nothing from java.util.logging
.
你应该导入org.apache.log4j.Logger
,而不是从java.util.logging
.