异常输出与容器输出的关系

本文探讨了在Shell脚本中控制Java应用程序的日志输出方法,包括如何通过日志配置避免控制台输出。同时,深入分析了一个具体的SQL异常案例,详细展示了如何在Java程序中捕获并处理SQLIntegrityConstraintViolationException异常,特别是当插入操作违反数据库唯一约束时的错误信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是:

0: Standard Input (STDIN)  键盘输入,并返回在前端
1: Standard Output (STDOUT)  正确返回值 输出到前端
2: Standard Error Output (STDERR) 错误返回值 输出到前端

容器脚本启动均有日志输出,既容器控制台输出,若不想java代码将日志输出到控制台需要通过java日志配置关闭控制台日志输出
& 默认返回错误(默认执行命令也是输出错误) 在java程序System.err.print错误信息输出到服务控制台日志
1>&2  将正确返回从新定位输出到错误输出上   在java程序中及将System.out.print的数据输出到System.err.print一起输出到服务控制台日志
2>&1  强错误返回从新定位到输出到正确输出上 在java程序中及将System.err.print的数据输出到System.out.print一起输出到服务控制台日志

log.info("err:"+e);
输出如下:

org.springframework.dao.DuplicateKeyException:
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

### The error may involve com.trunkbow.online.persist.online.OrderMapper.saveOrder-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO    T_ORDER   (     id,   NUM,   CUST_NUM,   ORDER_TYPE,   PAY_TYPE,   CARD_NO,   LIMIT_TYPE,   CURRENCY,   AMT,   ORIGINAL_AMT,   POINT,   STAGE,   STAGE_TYPE,   ORDER_DATE,   FQ_FIRSTMONEY,   FQ_POUNDAGE,   PAY_SOURCE,   HOST_NO,   HOST_DATE,   BACK_AMOUNT,   BACK_POINT,   REFUND_AMOUNT,   REFUND_PONT,   RETIRED_NUMBER,   ORIGINAL_ORDER,   ORIGINAL_DATE,   STATE,   ERROR_CODE,   ERROR_INF,   REMARK   )   VALUES (     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?     )
### Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

; SQL []; ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)
; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

 


1、e.getMessage():

### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

### The error may involve com.trunkbow.online.persist.online.OrderMapper.saveOrder-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO    T_ORDER   (     id,   NUM,   CUST_NUM,   ORDER_TYPE,   PAY_TYPE,   CARD_NO,   LIMIT_TYPE,   CURRENCY,   AMT,   ORIGINAL_AMT,   POINT,   STAGE,   STAGE_TYPE,   ORDER_DATE,   FQ_FIRSTMONEY,   FQ_POUNDAGE,   PAY_SOURCE,   HOST_NO,   HOST_DATE,   BACK_AMOUNT,   BACK_POINT,   REFUND_AMOUNT,   REFUND_PONT,   RETIRED_NUMBER,   ORIGINAL_ORDER,   ORIGINAL_DATE,   STATE,   ERROR_CODE,   ERROR_INF,   REMARK   )   VALUES (     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?     )
### Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

; SQL []; ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)
; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

 


2、e.getCause().getMessage():

ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

 


3、e.getLocalizedMessage():

### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

### The error may involve com.trunkbow.online.persist.online.OrderMapper.saveOrder-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO    T_ORDER   (     id,   NUM,   CUST_NUM,   ORDER_TYPE,   PAY_TYPE,   CARD_NO,   LIMIT_TYPE,   CURRENCY,   AMT,   ORIGINAL_AMT,   POINT,   STAGE,   STAGE_TYPE,   ORDER_DATE,   FQ_FIRSTMONEY,   FQ_POUNDAGE,   PAY_SOURCE,   HOST_NO,   HOST_DATE,   BACK_AMOUNT,   BACK_POINT,   REFUND_AMOUNT,   REFUND_PONT,   RETIRED_NUMBER,   ORIGINAL_ORDER,   ORIGINAL_DATE,   STATE,   ERROR_CODE,   ERROR_INF,   REMARK   )   VALUES (     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?     )
### Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

; SQL []; ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)
; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

 


4、e.getCause().getLocalizedMessage():

ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

 

5、e.getCause():

java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

 

6、e.getCause().class():

class java.sql.SQLIntegrityConstraintViolationException

 


7、e.getStackTrace():[Ljava.lang.StackTraceElement;@21ea3360
8、e.getCause().getStackTrace():[Ljava.lang.StackTraceElement;@21ea3f0a

9、e.printStackTrace()

org.springframework.dao.DuplicateKeyException:
### Error updating database.  Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

### The error may involve com.trunkbow.online.persist.online.OrderMapper.saveOrder-Inline
### The error occurred while setting parameters
### SQL: INSERT INTO    T_ORDER   (     id,   NUM,   CUST_NUM,   ORDER_TYPE,   PAY_TYPE,   CARD_NO,   LIMIT_TYPE,   CURRENCY,   AMT,   ORIGINAL_AMT,   POINT,   STAGE,   STAGE_TYPE,   ORDER_DATE,   FQ_FIRSTMONEY,   FQ_POUNDAGE,   PAY_SOURCE,   HOST_NO,   HOST_DATE,   BACK_AMOUNT,   BACK_POINT,   REFUND_AMOUNT,   REFUND_PONT,   RETIRED_NUMBER,   ORIGINAL_ORDER,   ORIGINAL_DATE,   STATE,   ERROR_CODE,   ERROR_INF,   REMARK   )   VALUES (     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?,     ?     )
### Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

; SQL []; ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)
; nested exception is java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

    at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:239)
    at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73)
    at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:73)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371)
    at com.sun.proxy.$Proxy125.insert(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:240)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:51)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
    at com.sun.proxy.$Proxy134.saveOrder(Unknown Source)
    at com.trunkbow.epay.alipay.service.impl.PayService.saveOrder(PayService.java:408)
    at com.trunkbow.epay.alipay.service.impl.PayService.doCheckRepeatByInsert(PayService.java:155)
    at com.trunkbow.epay.alipay.handler.CPHandler.doHandle(CPHandler.java:66)
    at com.trunkbow.epay.alipay.handler.CPHandler.doHandle(CPHandler.java:29)
    at com.trunkbow.alipay.message.service.imp.AbstractHandler.handle(AbstractHandler.java:47)
    at com.trunkbow.alipay.message.service.imp.SimpleDispathcher.dispatch(SimpleDispathcher.java:54)
    at com.trunkbow.alipay.message.controller.MessageController.execute(MessageController.java:85)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:776)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:705)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:959)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:893)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:868)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
    at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    at com.trunkbow.epay.filter.TimeFilter.doFilter(TimeFilter.java:40)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:85)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
    at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3730)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2273)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:256)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)
Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-00001: 违反唯一约束条件 (ALIPAY.UK_T_ORDER_01)

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
    at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
    at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
    at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:1044)
    at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1329)
    at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3593)
    at oracle.jdbc.driver.OraclePreparedStatement.execute(OraclePreparedStatement.java:3694)
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.execute(OraclePreparedStatementWrapper.java:1378)
    at weblogic.jdbc.wrapper.PreparedStatement.execute(PreparedStatement.java:99)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.update(PreparedStatementHandler.java:44)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.update(RoutingStatementHandler.java:69)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:48)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:105)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:71)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:152)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358)
    ... 48 more

 



转载于:https://www.cnblogs.com/atwanli/articles/6170767.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值