gpt4 book ai didi

java - 我用 Java 创建了自己的记录器。这是一个坏主意吗?

转载 作者:行者123 更新时间:2023-12-01 22:17:38 25 4
gpt4 key购买 nike

我正在使用 Java 和 XPage 开发网络爬虫。我在 SLF4J、Log4J、java.util.logging 等日志库与 Lotus Notes 之间遇到了很多兼容性问题。

因此,我开发了自己的非常简单的记录器类。

import java.io.PrintWriter;
import java.util.Calendar;

import org.apache.commons.lang3.exception.ExceptionUtils;

public class Logger {
private static final Calendar calendar = Calendar.getInstance();

public enum Level {NONE, ERROR, WARNING, INFO, DEBUG, TRACE}

private Level level = Level.NONE;
private PrintWriter stream = null;

public void setLevel(Level l) {
level = l;
}

public void setPrintWriter(PrintWriter f) {
stream = f;
}

public void error(String m) {
if (Level.ERROR.compareTo(level) <= 0) {
format("ERROR", m);
}
}

public void error(String m, Throwable e) {
if (Level.ERROR.compareTo(level) <= 0) {
StringBuilder sb = new StringBuilder(1024);
sb.append(m);
sb.append(ExceptionUtils.getStackTrace(e));

format("ERROR", sb.toString());
}
}

public void warn(String m) {
if (Level.WARNING.compareTo(level) <= 0) {
format("WARNING", m);
}
}

public void warn(String m, Throwable e) {
if (Level.WARNING.compareTo(level) <= 0) {
StringBuilder sb = new StringBuilder(1024);
sb.append(m);
sb.append(ExceptionUtils.getStackTrace(e));

format("WARNING", sb.toString());
}
}

public void debug(String m) {
if (Level.DEBUG.compareTo(level) <= 0) {
format("DEBUG", m);
}
}

public void info(String m) {
if (Level.INFO.compareTo(level) <= 0) {
format("INFO", m);
}
}

public void trace(String m) {
if (Level.TRACE.compareTo(level) <= 0) {
format("TRACE", m);
}
}

public void format(String type, String m) {
StringBuilder sb = new StringBuilder(1024);
sb.append("[");
sb.append(type);
sb.append("] ");
sb.append(calendar.getTime().toString());
sb.append(" - ");
sb.append(m);

String line = sb.toString();
System.out.println(line);

if (stream != null) {
stream.println(line);
stream.flush();
}
}
}

我的问题:

  • 编写记录器是一个坏主意吗?我是否必须坚持使其适用于现有的日志库之一?
  • 如果我决定始终使用此记录器,我会错过 SLF4J、Log4J、java.util.logging 等日志库的哪些功能?

编辑:感谢您的回答,这将是迄今为止的建议:

  • 如果我可以避免编写自定义记录器,那就完美了。如果我有充分的理由这样做,我希望没有人会杀我。
  • 当应用程序上线时,我会错过很多功能。
  • 到目前为止,Chain-of-responsibility pattern看起来是一个在短时间内实现的好主意,让我可以更好地控制输出。
  • 无论如何,我将再次检查代码,以防万一我错过了某些内容,并且我可以使其与众所周知的日志库一起使用。值得一试。

最佳答案

I had have lot of compatibility problems between the log libraries like SLF4J, Log4J, java.util.logging, etc. and Lotus Notes.

如果不知道这些问题是什么,就很难为您提供建议。可能有一个简单的修复或解决方法。

Is it a bad idea to write a logger?

重新发明轮子是个坏主意。除非您确实需要不同类型的轮子。

Do I have to insist in make it works one of the existent log libraries?

你的选择。

If I decide to use always this logger, what features I will miss from the log libraries like SLF4J, Log4J, java.util.logging, etc.?

很难说你会错过什么,因为这取决于你需要什么。

但是,您尝试的解决方案中缺少的一些内容包括:

  • 记录到多个文件、文件轮换等。
  • 记录到各种事件处理系统。
  • 日志记录的粗粒度/细粒度可配置性...无需更改代码。
  • 兼容性;例如如果您需要与使用标准日志记录框架的第三方软件集成。

如果其他 Java 程序员需要维护您的代码,他们可能会表示反感。

关于java - 我用 Java 创建了自己的记录器。这是一个坏主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30679750/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com