返回信息流public class A {
private static Logger logger = Logger.getLogger(A.class);
public static void main(String[] args) {
TTCCLayout layout = new TTCCLayout();
FileAppender appender = null;
try {
appender = new FileAppender(layout, "log.txt", false);
} catch(Exception e) {
}
logger.addAppender(appender);
logger.setLevel((Level)Level.DEBUG);
logger.debug("Here is some DEBUG");
}
}
上面的代码中,我采用log4j是为了记录出现的异常(上面为了简化,没有再写try catch,你懂的)。我想问,如果在实例化appender的时候出了异常怎么办?
这是一条镜像帖。来源:北邮人论坛 / java / #43252同步于 2015/7/31
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
[问题]log4j在初始化Appender的时候出异常怎么办?
wislov
2015/7/31镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
项目投产上线之后,打印出来有什么用
【 在 lixing 的大作中提到: 】
: 我用slf4j+logback的时候可以,console输出异常,为什么不可以?
总有无法抓住的异常。如果这都有异常,估计真的致命了吧。能做的也只有通知开发人员了。
p.s. 要不要试试slf4j和logback?和log4j同一个人开发的。
感觉这段code应该是在程序初始化的时候就执行的。而且在你的预期中这里也不应该出现任何异常。
如果append出现异常,觉得不要catch,直接抛让程序crash吧。这样在启动程序的时候就跪了。然后去查错就好了。
只处理自己知道、能处理的异常就好,其他异常就往外抛吧。生产环境最好是做一些隔离,比如一个request放在一个线程里,这个线程的未捕获exception做一个handler。程序里只catch自己能恢复的异常和知道有可能出现并且知道怎么处理(打log,rollback)的异常就行了。因为如果出现了你没有预料的异常,再catch让程序执行就不知道会发生什么奇怪的事情了。
erlang的程序里就鼓励这样直接让程序crash,但是它有个supervisor的机制,但process异常退出之后你可以捕获这个异常,然后再重新起一个这样的process。
【 在 wislov 的大作中提到: 】
: [code=java]
: public class A {
: private static Logger logger = Logger.getLogger(A.class);
: ...................