Java 在'中显示日期;System.out.println()和#x27;自动语句

Java 在'中显示日期;System.out.println()和#x27;自动语句,java,minecraft,Java,Minecraft,我知道,您打印的每一行都可能带有日期标签(也可以保存为日志文件) 例如,在Minecraft中: [16:21:43 INFO]: Minecraft Launcher 1.3.9 (through bootstrap 5) started on windows... 我该怎么做?梅比和伐木工人?还是需要外部图书馆?这些不是直接通过println完成的,而是使用记录器完成的。注意信息级别和日期 private static final Logger LOGGER = Logger.getLog

我知道,您打印的每一行都可能带有日期标签(也可以保存为日志文件)

例如,在Minecraft中:

[16:21:43 INFO]: Minecraft Launcher 1.3.9 (through bootstrap 5) started on windows...

我该怎么做?梅比和伐木工人?还是需要外部图书馆?

这些不是直接通过println完成的,而是使用记录器完成的。注意信息级别和日期

private static final Logger LOGGER = Logger.getLogger(X.getClass.getName());
然后

等等


最常见的记录器是Apache log4j或java.util.logging中的内置记录器。

可以通过调用
System.out.println来显示字符串中的日期前缀

  • 创建自定义的
    PrintStream
  • 重写
    println
    方法以在字符串前面加上日期前缀
  • 设置
    系统。使用自定义
    打印流设置
  • 自定义流:

    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!
    
    测试类:

    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!
    
    输出:

    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!
    
    虽然这是正确的、聪明的,并且明确地回答了这个问题,但更大的答案是:使用日志框架。日志框架将自动插入当前日期时间,并执行更多操作

    通常我们使用System.out.println()只是为了在编程时快速地检查值。从程序中获取信息的更有组织的方法是使用日志框架(或者,但这完全是另一个主题)

    log4j 在过去,该框架是一个流行的框架,也是最早创建光滑日志系统的框架之一。目前,log4j的大修正在进行中,名为

    java.util.logging 后来,Sun向Java添加了一个新的组件。虽然有用,但很多人认为它不太理想。

    SLF4J log4j的创造者后来又创造了他先前发明的继承者。他将其分解为(1)一个基于接口的API,以及(2)实际执行日志记录的任意数量的实现。其思想是,您可以在不更改自己的代码库的情况下插入或替换各种实现

    立面被称为。SLF4J附带了几个非常简单的实现。但一般来说,您希望插入更健壮、更灵活或更专业的实现

    有几个适配器可用于使用可能不知道SLF4J的其他日志框架,如log4j或java.util.logging

    许多库使用SLF4J进行内部日志记录,因此使用该库的任何人都可以在其下面插入自己选择的日志记录框架

    倒退 SLF4J的创建者还创建了自己的完整SLF4J实现,名为

    使用
    使用这些日志框架的一个要点是灵活性。您可以将它们配置为向
    System.out
    System.err
    、文本文件、数据库和其他目的地发送消息。

    尝试一下。这不难理解。找一个日志库。当我创建一个Bukkit插件(Minecraft服务器软件)时,“System.out.println(“Hello Stackoverflow”);”不会仅显示消息,日期/信息标记不仅显示日志记录程序,还显示其上的模式。有一些日志模式,您可以只显示日期、日期和时间、发布日志消息的类的名称,以及除日志消息之外的更多信息。好的,这对我很有用,但我记录的所有内容都会显示在以下消息之后:
    2月10日,2014年4:36:47 PM de.test.LoggerTest execute
    如何禁用它?@Ercksen你应该离开它,它告诉你代码在哪里执行。如果你真的想改变它,那么你需要配置日志-你可以完全改变它显示每条消息的方式,甚至让它在不同的地方使用完全不同的显示器。完美!很好,谢谢!现在,我甚至知道如何将它登录到文件中。非常好!:)回答得很好,但是
    Date
    类现在已经过时了。在Java8及更高版本中,该框架取代了旧的Java.util.Date类。要以标准格式获取当前日期时间的字符串:
    Instant.now().toString()
    返回一个字符串,如
    2016-02-08T16:22:33Z
    。这是一个非常有用的详细解释