嵌入式设计应用
Logback是一个开源的日志组件,是log4j的作者开发的用来替代log4j的。
logback由三个部分组成,logback-core, logback-classic, logback-access。其中logback-core是其他两个模块的基础。
slf4j 定义日志接口及基本实现,而具体的实现由其他日志组件提供
log4j
commons-logging
logback
因此,如果想替换成其他的日志组件,只需要替换jar包即可。
logback中三个重要概念: Logger,Appender,Layout
Logger: 日志记录器,把它关联到应用对应的context上后,主要用于存放日志对象,定义日志类型,级别。
Appender: 指定日志输出的目的地,目的地可以是控制台,文件,或者数据库等
Layout: 负责把事件转换成字符串,格式化日志信息的输出
寻找logback.xml
logback首先在classpath寻找logback.groovy文件,
如果没找到,继续寻找logback-test.xml文件
如果没找到,继续寻找logback.xml文件
如果仍然没找到,则使用默认配置(打印到控制台)
可能使用logback或者log4j的大家都遇到过这种情况,想要在try catch中输出异常到日志的时候使用了logger.error(e.getMessage());但是这样输出后只有一行简单的异常提示,并没有详细的调用堆栈的信息,所以我们需要定义一个工具类来获取异常详细的调用堆栈。
[java] view plain copyimport java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
public class ExceptionUtil {
public static String getMessage(Exception e) {
StringWriter sw = null;
PrintWriter pw = null;
try {
sw = new StringWriter();
pw = new PrintWriter(sw);
// 将出错的栈信息输出到printWriter中
e.printStackTrace(pw);
pw.flush();
sw.flush();
} finally {
if (sw != null) {
try {
sw.close();
} catch (IOException e1) {
e1.printStackTrace();
}
}
if (pw != null) {
pw.close();
}
}
return sw.toString();
}
}
传入一个异常写入流中再转为字符串输出出来就是我们想要的详细信息(调用堆栈)
[java] view plain copytry{
。。.
}catch (Exception e){
logger.error(“[lid:{}] [{}]《《 exception happened! detail:{}”, logIndex, logFlag, e);
}
则无法输出异常的调用堆栈,下面这个一个静态工具函数,可以输出异常的堆栈信息,如下:
[java] view plain copypublic static String getExceptionStackTrace(Throwable anexcepObj)
{
StringWriter sw = null;
PrintWriter printWriter = null;
try{
if(anexcepObj != null)
{
sw = new StringWriter();
printWriter = new PrintWriter(sw);
anexcepObj.printStackTrace(printWriter);
printWriter.flush();
sw.flush();
return sw.toString();
}
else
return null;
}finally
{
try
{
if(sw != null)
sw.close();
if(printWriter != null)
printWriter.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
[java] view plain copytry{
。。.
}catch (Exception e){
logger.error(“[lid:{}] [{}]《《 exception happened! detail:{}”, logIndex, logFlag, 《span style=“color:#ff0000;”》getExceptionStackTrace《/span》(e));
}
全部0条评论
快来发表一下你的评论吧 !