spring代码异常捕获到logback logging.config=logback-spring.xml文件中不能输出异常e.printStackTrace
在spring中使用logging.config=logback-spring.xml将日志转存到了文件中。但是代码中的捕获的异常无法用 e.printStackTrace 打印到文件中。使用如下方法打印:
- main:
- catch(Exception e){
- log.error("xxx",e);
- }
- 这里可以重新定向 system.out 和err的输出,到logback:
https://stackoverflow.com/questions/1200175/log4j-redirect-stdout-to-dailyrollingfileappender- 用于捕获运行时异常。
- package com.italktv.platform.audioDist;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.PrintStream;
- import org.apache.log4j.Level;
- import org.apache.log4j.Logger;
- public class Log4jStdOutErrProxy {
- public static void bind() {
- bind(Logger.getLogger("STDOUT"), Logger.getLogger("STDERR"));
- }
- @SuppressWarnings("resource")
- public static void bind(Logger loggerOut, Logger loggerErr) {
- // System.setOut(new PrintStream(new LoggerStream(loggerOut, Level.INFO, System.out), true));
- System.setErr(new PrintStream(new LoggerStream(loggerErr, Level.ERROR, System.err), true));
- }
- private static class LoggerStream extends OutputStream {
- private final Logger logger;
- private final Level logLevel;
- private final OutputStream outputStream;
- private StringBuilder sbBuffer;
- public LoggerStream(Logger logger, Level logLevel, OutputStream outputStream) {
- this.logger = logger;
- this.logLevel = logLevel;
- this.outputStream = outputStream;
- sbBuffer = new StringBuilder();
- }
- @Override
- public void write(byte[] b) throws IOException {
- doWrite(new String(b));
- }
- @Override
- public void write(byte[] b, int off, int len) throws IOException {
- doWrite(new String(b, off, len));
- }
- @Override
- public void write(int b) throws IOException {
- doWrite(String.valueOf((char) b));
- }
- private void doWrite(String str) throws IOException {
- sbBuffer.append(str);
- if (sbBuffer.charAt(sbBuffer.length() - 1) == '\n') {
- // The output is ready
- sbBuffer.setLength(sbBuffer.length() - 1); // remove '\n'
- if (sbBuffer.charAt(sbBuffer.length() - 1) == '\r') {
- sbBuffer.setLength(sbBuffer.length() - 1); // remove '\r'
- }
- String buf = sbBuffer.toString();
- sbBuffer.setLength(0);
- outputStream.write(buf.getBytes());
- outputStream.write('\n');
- logger.log(logLevel, buf);
- }
- }
- } // inner class LoggerStream
- }
初始化时调用:
// initialize logging to go to rolling log file
LogManager.resetConfiguration();
// and output on the original stdout
System.out.println("Hello on old stdout");
Log4jStdOutErrProxy.bind();
spring代码异常捕获到logback logging.config=logback-spring.xml文件中不能输出异常e.printStackTrace的更多相关文章
- Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)
<bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...
- 事务配置在applicationContext.xml文件中不起作用,控制不了异常回滚
一.博主在学习到整合ssm框架的时候,遇到一个奇葩的问题就是将 事务的控制 ,写在在applicationContext.xml文件中不起作用,在事务控制的方法中,即使出现了异常,但是事务不会回滚的坑 ...
- 死磕Spring之IoC篇 - BeanDefinition 的加载阶段(XML 文件)
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...
- Android中通过代码获取arrays.xml文件中的数据
android工程res/valuse文件夹下的arrays.xml文件中用于放各种数组数据,比如字符串数组.整型数组等,数组中的数据可能是具体的值,也有可能是对资源数据的引用,下面针对这两种情况通过 ...
- web.xml 文件中一般包括 servlet, spring, filter, listenr的配置的加载顺序
首先可以肯定 加载顺序与他们在web.xml 文件中的先后顺序无关. web.xml 中 listener 和 serverlet 的加载顺序为 先 listener 后serverlet最终得出结果 ...
- 当你的Spring IOC 容器(即applicationContext.xml文件)忘记配到web.xml 文件中时
当你的Spring IOC 容器忘记配到web.xml 文件中时,启动服务器就会报错. 部分错误如下: Caused by: org.springframework.beans.factory.NoS ...
- Spring 在xml文件中配置Bean
Spring容器是一个大工厂,负责创建.管理所有的Bean. Spring容器支持2种格式的配置文件:xml文件.properties文件,最常用的是xml文件. Bean在xml文件中的配置 < ...
- spring将service添加事务管理,在applicationContext.xml文件中的设置
在applicationContext.xml文件中的设置为: <beans> <bean id="sessionFactory" class="org ...
- Spring MVC静态资源处理(在applicationContex.xml文件中进行配置)
优雅REST风格的资源URL不希望带 .html 或 .do 等后缀.由于早期的Spring MVC不能很好地处理静态资源,所以在web.xml中配置DispatcherServlet的请求映射,往往 ...
随机推荐
- Azure系列2.1.6 —— BlobProperties
(小弟自学Azure,文中有不正确之处,请路过各位大神指正.) 网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习 ...
- 在Laravel中使用数据库事务以及捕获事务失败后的异常
Description 在Laravel中要想在数据库事务中运行一组操作,则可以在 DB facade 中使用 transaction 方法.如果在事务的闭包内抛出异常,事务将会被自动还原.如果闭包运 ...
- python爬虫之Splash使用初体验
Splash是什么: Splash是一个Javascript渲染服务.它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT.Twisted(Q ...
- Django的一些操作与视图函数
一 . Django的安装 pip install django==1.14.6 # 后面的数字是django的版本 二 . 通过命令行(cmd)来创建Django项目 1. 切换到保存项目的文件夹 ...
- Partition算法以及其应用详解上(Golang实现)
最近像在看闲书一样在看一本<啊哈!算法> 当时在amazon上面闲逛挑书,看到巨多人推荐这本算法书,说深入浅出简单易懂便买来阅读.实际上作者描述算法的能力的确令人佩服.就当复习常用算法吧. ...
- 在windows 7上安装TensorFlow
TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习.目前被50个团队用于研究和生产许多Google商业产品,如语音识别.Gmail.Google 相册和搜索,其中许多产品曾使用 ...
- 死锁问题分析(个人认为重点讲到了gap间隙锁,解决了我一些不明报死锁的问题)
线上某服务时不时报出如下异常(大约一天二十多次):“Deadlock found when trying to get lock;”. Oh, My God! 是死锁问题.尽管报错不多,对性能目前看来 ...
- 版本控制Git使用最佳实践
总结版本控制Git的使用,应明确有哪些具体的场景 应用场景 紧急上线(hotfix) 功能开发(feature) 测试(dev/release) 生产(master) 紧急上线 4.git c ...
- 四、docker compose
docker compose可以方便我们快捷高效地管理容器的启动.停止以及重启等操作,和批量管理容器,它类似于linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什 ...
- 三、kubernetes环境搭建(实践)
一.目前近况 docker 版本 K8S支持 18.06的 二.安装docker #1.配置仓库 sudo yum install -y yum-utils device-mapper-persist ...