问题
我有一种情况,我想写下我创建的所有日志写入文本文件。
我们使用java.util.logging.Logger API来生成日志。
我试过了
private static Logger logger = Logger.getLogger(className.class.getName());
FileHandler fh;
fh = new FileHandler("C:/className.log");
logger.addHandler(fh);
但仍然只在控制台上登录....
#1 热门回答(184 赞)
试试这个样本。这个对我有用。
public static void main(String[] args) {
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler("C:/temp/test/MyLogFile.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.info("My first log");
} catch (SecurityException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
logger.info("Hi How r u?");
}
在MyLogFile.log生成输出
Apr 2, 2013 9:57:08 AM testing.MyLogger main
INFO: My first log
Apr 2, 2013 9:57:08 AM testing.MyLogger main
INFO: Hi How r u?
Edit:
要删除控制台处理程序,请使用
logger.setUseParentHandlers(false);
因为ConsoleHandler是在父记录器中注册的,所有记录器都来自该记录器。
#2 热门回答(13 赞)
首先,你在哪里定义了你的记录器以及从哪个类\方法尝试调用它?有一个工作的例子,新鲜出炉:
public class LoggingTester {
private final Logger logger = Logger.getLogger(LoggingTester.class
.getName());
private FileHandler fh = null;
public LoggingTester() {
//just to make our log file nicer :)
SimpleDateFormat format = new SimpleDateFormat("M-d_HHmmss");
try {
fh = new FileHandler("C:/temp/test/MyLogFile_"
+ format.format(Calendar.getInstance().getTime()) + ".log");
} catch (Exception e) {
e.printStackTrace();
}
fh.setFormatter(new SimpleFormatter());
logger.addHandler(fh);
}
public void doLogging() {
logger.info("info msg");
logger.severe("error message");
logger.fine("fine message"); //won't show because to high level of logging
}
}
在你的代码中,你忘记定义格式化程序,如果你需要简单的格式化程序,你可以按照上面的说明进行操作,但还有另一个选项,你可以自己格式化,有一个示例(只需插入而不是此行fh) .setFormatter(新的SimpleFormatter())代码):
fh.setFormatter(new Formatter() {
@Override
public String format(LogRecord record) {
SimpleDateFormat logTime = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
Calendar cal = new GregorianCalendar();
cal.setTimeInMillis(record.getMillis());
return record.getLevel()
+ logTime.format(cal.getTime())
+ " || "
+ record.getSourceClassName().substring(
record.getSourceClassName().lastIndexOf(".")+1,
record.getSourceClassName().length())
+ "."
+ record.getSourceMethodName()
+ "() : "
+ record.getMessage() + "\n";
}
});
或任何其他任何你喜欢的修改。希望能帮助到你。
#3 热门回答(5 赞)
一个很好的图书馆名为log4j for Java。
这将提供众多功能。通过链接,你将找到你的解决方案。