[英]how to not throw exceptions to server.log in java
在我的应用程序中,我正在使用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:
<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
。
如果要停止方法执行,只需从方法中return
即可。
如果您也想在调用方方法中停止执行,则不要抛出未检查的异常。 声明要引发已检查异常的方法,并捕获该异常并将其记录在调用方中。
您可以为未捕获的异常设置自定义异常处理程序:
Thread.currentThread().setUncaughtExceptionHandler(yourExceptionHandler);
但是我建议您更改代码,而不是将此类“ hacks”放置在随机的位置。
相关问题: 如何配置log4j不打印异常stactrace
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.