logback配置控制打印台异常信息_logback异常输出详细信息(调用堆栈)分析
Logback背景
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异常输出详细信息(调用堆栈)
可能使用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();
}
}
传入一个异常写入流中再转为字符串输出出来就是我们想要的详细信息(调用堆栈)
使用logback、log2j输出java异常如果采用如下方式:
[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));
}
打开APP精彩内容
点击阅读全文
logback配置控制打印台异常信息_logback异常输出详细信息(调用堆栈)分析相关推荐
- python输出个人信息_Python如何输出警告信息
问题 你希望自己的程序能生成警告信息(比如废弃特性或使用问题). 解决方案 要输出一个警告消息,可使用 warning.warn()函数.例如: import warnings def func(x, ...
- logback配置控制打印台异常信息_logback 如何配置让异常信息全部记录到日志,而不是只有异常的第一行?...
下面是日志配置 ,一个控制台打印和一个纪录文件 : <!-- Simple file output --> <appender name="FILE" class ...
- 获取linux详细信息,Linux 获取网口详细信息
一般来说,研究 ifconfig.c 源代码就可以达到目的了. 但是Linux已经提供了比较方便的获取网口信息的方式: [philip@catonbj ~]$ cat /sys/class/net/e ...
- java保存登录信息_java – 保存登录详细信息(首选项)android
我有一个具有登录,注销功能的Android应用程序.登录表单包含用户名和密码以及登录按钮.我想在用户选中"记住我"复选框时保存用户名和密码. 我的project.java文件如下所 ...
- .NET Core开发实战(第22课:异常处理中间件:区分真异常与逻辑异常)--学习笔记(上)...
22 | 异常处理中间件:区分真异常与逻辑异常 这一节我们来讲解一下错误处理的最佳实践 系统里面异常处理,ASP.NET Core 提供了四种方式 1.异常处理页 2.异常处理匿名委托方法 3.IEx ...
- 运行时异常与一般异常有何异同
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的 ...
- 信息收集道道之外网信息收集
#信息收集道道之外网信息收集 从个人的角度去简单整理下打点前的信息收集那些事.从信息收集本质上来说多数内容都是大同小异,遇到坚壁时,不用死磕,毕竟条条大路通罗马(大佬们也可以说说看法~向各位大佬学习! ...
- cloud foundry_实际的Reactor操作–检索Cloud Foundry应用程序的详细信息
cloud foundry CF-Java-Client是一个库,可通过程序访问Cloud Foundry Cloud Controller API . 它建立在Project Reactor之上,它 ...
- 实际的Reactor操作–检索Cloud Foundry应用程序的详细信息
CF-Java-Client是一个库,可通过程序访问Cloud Foundry Cloud Controller API . 它建立在Project Reactor之上,它是Reactive Stre ...
最新文章
- 1.4 os的运行机制和体系结构
- Windows 系统补丁管理策略
- 无数踩坑系列(3)-配置pytorch
- 2.24 js处理内嵌div滚动条
- 李飞飞:一站式全链路数据管理与服务成为产业布局重点
- python copy
- 猫哥教你写爬虫 004--数据类型转换-小练习
- MySQL进阶13--常见六大约束: 非空/默认/主键/唯一约束/检查约束/外键约束--表级约束 / 列级约束...
- 我花 10 个小时,写出了小白也能看懂的阿里数据中台分析!
- DIV+CSS学习笔记总结篇
- python中写公式_使用Python书写的公式编辑器
- 计算机通信中ip,macid的主要作用和区别
- Xposed快速入门例子(二)----- 调方法的合适时机
- 一个程序员是如何蜕变为投资人的?
- Android无线热点默认属性修改
- 练习之彩票三 添加号码相关代码
- 无人机电力巡线和无人机电力巡检在三维地理信息电子沙盘系统中的应用解决方案
- My-Blog搭建过程:如何让一个网站从零到可以上线访问
- 《量子宇宙》阅读笔记
- 2016中国“互联网+”千人论坛隆重举行 郎永淳主持 杨学山刘九如等嘉宾出席
热门文章
- 通过sessionid获取session php,php如何返回sessionID和如何通过sessionID获取相关的session...
- python 提交表单登录不成功_Python http requests模拟登录与提交表单的实现问题
- 内容推荐 | 生信技术与前沿内容知识库
- R语言I绘制等高线图
- 在线作图丨如何画一个优美的相关性热图
- Google学术分析公司科研实力:谷歌1161,华为110,为何差10倍?
- 生信小白7行代码画一个高颜值的世界地图
- 蚊子已经很可怕了,而这些吸血昆虫能让你感受真正的恐惧
- NEJM:益生菌LGG治疗肠胃炎无效,Immunity|LGG促进生骨
- 丰度决定了细菌在复杂群落中的功能作用