我试图找到一种优雅的方法来从我的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在控制台和日志文件中触发它。
我考虑过制作一个可以做到这一点的功能但决定级别是否太复杂,无论是否输出到控制台。
有没有快速而聪明的方法来实现我想要做的事情。
我想你可以说,当我的程序完美运行时,一些额外的代码行会造成什么损害,只是试图过度设计它。
答案 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