输出到控制台并登录一个命令? Java的

时间:2013-11-01 10:58:09

标签: java logging console stdout

我试图找到一种优雅的方法来从我的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在控制台和日志文件中触发它。

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

有没有快速而聪明的方法来实现我想要做的事情。

我想你可以说,当我的程序完美运行时,一些额外的代码行会造成什么损害,只是试图过度设计它。

2 个答案:

答案 0 :(得分: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这样的日志框架也可以。

答案 1 :(得分: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