0

我正在尝试找到一种优雅的方法来从我的 Java 应用程序中删除多余的代码行

我有单独的代码行输出到控制台和日志文件,如下所示:

catch (SQLException e)
            {
                e.printStackTrace();
                System.out.println("The Database connection failed to open check username/password and connection url are valid.");
                logger.info("The Database connection failed to open check username/password and connection url are valid.");
                end(2);
            }

我想知道是否有办法使用 stdout 在控制台和日志文件中触发它。

我考虑过制作一个可以做到这一点的功能,但是决定级别太复杂了,是否输出到控制台。

是否有任何快速而聪明的方法来实现我想要做的事情。

我想你可能会说,当我的程序完美运行时,几行额外的代码有什么害处,只是试图过度设计它。

4

2 回答 2

2

你总是可以使用System.setOut()并提供一个子类PrintStream,做任何你不想做的事情......

如果这似乎是不必要的工作,那就把它放在一个方法中......

// Warning, untested code!

enum Level {DEBUG, INFO, WARNING, ERROR}

public static Logger logger; // Whereever you get this one...

public static void log(Level level, String s) {
    System.out.println(level.name() + ": " + s);
    switch (level) {
         case INFO:
             logger.info(s);
             break;

         // The other levels...
    }
}

就个人而言,我制作了自己的记录器(非常简单):

L.i("Testing logging");

输出

[INFO , 12:07:41.455, utill.log.Test.main.10]: Testing logging

它是可配置的,如果您需要将其重定向到文件或另一个流,这真的很容易。但我想像 self4j这样的日志框架也可以。

于 2013-11-01T11:03:00.313 回答
1

你可能想要这样的东西?

import java.io.IOException;
import java.util.logging.FileHandler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

import org.junit.Test;

public class LoggerTest {
    Logger logger = Logger.getLogger(LoggerTest.class.getSimpleName());

    public LoggerTest() {
        try {
            FileHandler fh = new FileHandler("test.log");
            fh.setFormatter(new SimpleFormatter());
            logger.addHandler(fh);
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void test() {
        try {
            throw new Exception("Hoppla");
        } catch (Exception e) {
            logger.log(Level.SEVERE, e.getMessage(), e);
        }
    }

}

在这里您可以找到更多信息:http ://www.vogella.com/articles/Logging/article.html

于 2013-11-01T11:25:57.510 回答