代码之家  ›  专栏  ›  技术社区  ›  Hank Jesus M C

如何停止记录已处理的异常?

  •  0
  • Hank Jesus M C  · 技术社区  · 14 年前

    我刚刚为JPA实体的唯一约束实现了异常处理。它按我所希望的方式工作,但是触发时会将处理过的异常转储到容器日志文件中。

    • JPA实体由SLSB(服务部门)管理。服务Façade是从另一个SLSB调用的,它提供基于JAX-RS的远程处理功能。
    • 在服务外观中,EntityManager操作被包装在try-catch块中,用于检测唯一约束冲突的原因。然后它抛出一个自定义的 ApplicationException .
    • 剩下的豆子吃了 并抛出一个自定义 BadRequestException
    • ExceptionMapper 输出 BadRequestException异常 到远程客户端。

    这一切都很顺利。我不理解的部分是:(已处理的)异常记录在容器的日志文件中(包含一个长stacktrace):

    [#|2010-09-29T18:49:39.185+0200|WARNING|glassfish3.0.1|org.eclipse.persistence.session.file:/Users/hank/NetBeansProjects/CoreServer/build/classes/_coreServerPersistenceUnit|_ThreadID=30;_ThreadName=Thread-1;|
    Local Exception Stack: 
    Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
    Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry....
    ....
    Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry....
    

    从抛出BadRequestException开始:

    [#|2010-09-29T18:49:39.336+0200|WARNING|glassfish3.0.1|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=30;_ThreadName=Thread-1;|A system exception occurred during an invocation on EJB ShopperResource method public javax.ws.rs.core.Response mvs.gateway.ShopperResource.create(javax.xml.bind.JAXBElement)
    javax.ejb.EJBException
    at com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5119)
    ....
    Caused by: mvs.api.exception.BadRequestException: mvs.api.exception.MvsCause: Field 'MSISDN' must be unique!
    

    应该是这样吗?我想既然我处理了异常,它们就不会被转储到日志中了?

    2 回复  |  直到 14 年前
        1
  •  3
  •   James    14 年前

    记录异常是因为启用了异常记录。

    当日志级别为警告或更高时,默认情况下会记录异常。如果您将日志级别设置为SEVERE或OFF,则不会记录它们。

    即 "eclipselink.logging.level级“=”严重“

    您还可以设置“eclipselink.logging.exceptions异常“=”false“属性仅禁用异常日志记录。

    http://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging

        2
  •  0
  •   tangens    14 年前

    数据库层负责记录异常。当你抓到它们的时候,它们已经被写入日志了。