java - 如何在java中不向server.log抛出异常

标签 java exception log4j glassfish-3

在我的应用程序中,我使用 log4j 并有一个 my_system.log ,所有消息都应在其中抛出。我遇到的问题是,当发生错误时,它也会显示在 server.log 中(我不希望这种情况发生)。

public String getAccessFlag (String userId, String participantCode, String roleId) {
    HashMap parmMap = new HashMap();
    parmMap.put("userId", userId.toUpperCase());
    parmMap.put("roleId", roleId);
    log.info(parmMap);
    try {
        getSqlMapClientOltp().queryForList("auth.getAccess", parmMap);
    } catch (SQLException ex) {
        log.error(ex, ex);
        throw new RuntimeException (ex);
    }
    List result = (List)parmMap.get("Result0");
    return ((String)(((HashMap) result.get(0)).get("accessVoucher"))).trim();
}

如您所见,我捕获异常是因为我想将其记录在 my_system.log 中,但因为我希望停止执行(因为错误发生),所以我再次抛出错误。

我相信因为我抛出了它,所以它显示在 server.log 中。

如何避免这种情况?

更新:

以下是我的附加程序:

<appender name="myAppender" class="org.apache.log4j.AsyncAppender">
    <appender-ref ref="myFile" />
</appender>

<appender name="myFile" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../systems/my/log/my_system.log" />
    <param name="Append" value="true" />
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="[%d{dd/MMM/yyyy:HH:mm:ss.SSS}]~[%-5p]~[%c:%M]~[%m]%n" />
    </layout>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="TRACE#com.org.common.logging.HUDLogLevel" />
        <param name="LevelMax" value="FATAL" />
    </filter>
</appender>

最佳答案

所有未捕获的异常都将写入服务器日志。如果您不希望某些内容出现在那里,请不要重新抛出 RuntimeException

如果您想停止方法执行,只需从该方法返回即可。

如果您还想停止调用方方法的执行,则不要重新抛出未经检查的异常。声明要抛出已检查异常的方法并捕获它并将其记录在调用者中。

可以为未捕获的异常设置自定义异常处理程序:

Thread.currentThread().setUncaughtExceptionHandler(yourExceptionHandler);

但我建议更改代码,而不是在随机位置放置此类“黑客”。

相关问题:How can I configure log4j to not print the exception stactrace

关于java - 如何在java中不向server.log抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3550284/

相关文章:

java - 为什么年轻代需要3个区域来进行垃圾收集?

java - Weblogic 9.2支持Sun Jdk 1.6吗?

java - 使用 log4j.xml 时出现 log4j 警告消息

java - 使用 TreeMap 查找最大元素

java - 将Spring Boot项目部署到WSL,动态Web模块不断恢复到4.0

powershell - 如何将 catch block 中的所有错误放入 Powershell 中的电子邮件正文中?

Python 2.7 异常处理语法

Java:捕获Driver类中Worker类抛出的异常

java - 记录多线程应用程序中的 Activity

hibernate - 如何使用log4j2禁用 hibernate 4输出?