我知道您打印的每一行都可以用日期标记(也可以保存为日志文件)。
例如在Minecraft中:
[16:21:43 INFO]: Minecraft Launcher 1.3.9 (through bootstrap 5) started on windows...
我该怎么做?也许和Logger一起?或者是否需要外部图书馆?
答案 0 :(得分:5)
可以通过调用System.out.println
PrintStream
类println
方法,为String添加日期System.setOut
PrintStream
醇>
自定义流:
public class MyPrintStream extends PrintStream {
public MyPrintStream(OutputStream out) {
super(out);
}
@Override
public void println(String string) {
Date date = new Date();
super.println("[" + date.toString() + "] " + string);
}
}
测试类:
public static void main(String[] args) {
System.setOut(new MyPrintStream(System.out));
System.out.println("Hello World!");
System.out.println("Yellow World!");
}
<强>输出:强>
[Mon Feb 10 21:10:14 IST 2014] Hello World!
[Mon Feb 10 21:10:14 IST 2014] Yellow World!
答案 1 :(得分:4)
这些不是通过println直接完成的,它们是使用记录器完成的。请注意INFO级别以及日期。
private static final Logger LOGGER = Logger.getLogger(X.getClass.getName());
然后
LOGGER.info("Hi");
LOGGER.debug("This is a debug message");
等
最常见的记录器是Apache log4j或java.util.logging中的内置记录器。
答案 2 :(得分:3)
虽然the answer by PopoFibo是正确的,聪明的,并且专门回答了问题,但更大的答案是:使用日志框架。日志记录框架将自动插入当前日期时间并执行更多操作。
通常我们使用System.out.println()只是为了在编程时快速检查值。从程序中获取信息的更有条理的方法是使用日志框架(或JMX – Java Management Extensions,但这是另一个主题)。
在过去,log4j框架是一个流行的框架,也是最早创建光滑日志系统的框架之一。目前正在对log4j进行大修,称为Apache Log4j 2。
后来,Sun向Java添加了logging facility。虽然有用,但许多人认为它不是最佳的。
log4j的创建者后来继续创建了他之前发明的继承者。他把它分成了(1)一个façade,一个基于接口的API,以及(2)实际进行日志记录的任意数量的实现。我们的想法是,您可以在不更改自己的代码库的情况下插入或替换各种实现。
外观称为SLF4J (Simple Logging Façade for Java)。 SLF4J捆绑了几个非常简单的实现。但通常您会希望插入更强大,更灵活或专业的实现。
有几个适配器可用于其他可能不了解SLF4J的日志框架,例如log4j或java.util.Logging。
许多库使用SLF4J进行内部日志记录,因此使用该库的任何人都可以插入自己特定的日志记录框架。
SLF4J的创建者还创建了他自己的SLF4J的完整实现,称为LogBack。
使用这些日志框架的要点之一是灵活性。您可以将它们配置为向System.out
,System.err
,文本文件,数据库和其他目标发送消息。