【问题标题】:how to not throw exceptions to server.log in javajava - 如何在java中不向server.log抛出异常
【发布时间】:2010-08-23 17:59:45
【问题描述】:

在我的应用程序中,我使用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>

【问题讨论】:

  • 你在使用 JBoss 吗?如果有,是哪个版本的 JBoss?
  • 你能展示你的appender吗?你在用ConsoleAppender吗?
  • 我没有使用ConsoleAppender 我已经用我的附加程序更新了问题

标签: java exception-handling log4j glassfish-3


【解决方案1】:

所有未捕获的异常都将进入服务器日志。如果你不想去那里,不要重新抛出RuntimeException

如果您想停止方法执行,只需从方法中return 即可。

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

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

Thread.currentThread().setUncaughtExceptionHandler(yourExceptionHandler);

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

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

【讨论】:

  • 此时我想避免接触我的来电者。因为这对我来说将是一个巨大的改变。更改来电者是我最后的选择
  • 所以你说的是不是抓住它并将其扔进DAO..我应该抓住它并将其记录在调用者中? log4j 中是否没有替代方法或设置不将某些类型的异常记录到 server.log
  • 即使有,它仍然是“黑客”。最好重构你的代码
  • 我了解到代码有问题。在上述方法中,为什么现在允许我抛出捕获的异常 SQLException 而不将方法声明为 throws ...但它允许我抛出未捕获的异常 RunTimeException 我可以通过抛出 SQLException 但不声明来解决吗方法为throws SQLException ?
  • 我已经听取了您的建议,并开始在链上捕获异常。我问了另一个问题。请看看你能不能帮忙。 stackoverflow.com/questions/3553294/…
猜你喜欢
  • 1970-01-01
  • 2016-08-10
  • 2012-07-23
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-09
相关资源
最近更新 更多