Java中堆栈跟踪的可选打印
我正在创建一个java应用程序,其中可能会抛出异常。我在try-catch块中处理这些异常,并打印适当的消息,以便业务用户在出现故障时不必看到丑陋的堆栈跟踪 但是现在当我调试时,我想调用JAR文件,这样它就可以为我打印堆栈跟踪,这样我就可以知道问题到底出在哪里了Java中堆栈跟踪的可选打印,java,exception-handling,Java,Exception Handling,我正在创建一个java应用程序,其中可能会抛出异常。我在try-catch块中处理这些异常,并打印适当的消息,以便业务用户在出现故障时不必看到丑陋的堆栈跟踪 但是现在当我调试时,我想调用JAR文件,这样它就可以为我打印堆栈跟踪,这样我就可以知道问题到底出在哪里了 有人能告诉我如何做到这一点吗?为什么不使用日志记录级别 调试您的技术错误 和信息或错误以及用户理解的业务代码。这类事情通常由日志记录器和不同的日志级别处理 您通常有3个日志级别:常规日志、警告和错误。 输出时,您可以决定消息的级别 当你
有人能告诉我如何做到这一点吗?为什么不使用日志记录级别 调试您的技术错误
和信息或错误以及用户理解的业务代码。这类事情通常由日志记录器和不同的日志级别处理 您通常有3个日志级别:常规日志、警告和错误。 输出时,您可以决定消息的级别 当你启动你的应用程序时,你要告诉你的Logger它应该显示哪个级别。
对于您的用户来说,这将是一个错误,只有最糟糕的事情应该是可见的,对于您自己来说,您将输出所有内容在两个不同的位置创建两个具有相同包/名称的类
public class PrintStackTraceUtil
{
public static void printStackTrace(Throwable err)
{
//ignore
}
}
及
编译java程序时,在sourcepath中只放置其中一个路径,您可以将其用作facade,以便能够快速更改实现并用作日志记录的实现。slf4j和logback的结合是目前非常有效的测井系统。如果您想使用另一个实现,如log4j、jdk1.4或Jacarta Commons日志,您可以将实现(绑定)的jar更改为所需的jar。下面是关于如何使用带有logback的slf4j的快速用户手册
设置您的环境
首先,您应该导入使用slf4j所需的必要JAR
- 转到并下载slf4j-1.7.0.zip
- 提取slf4j-1.7.0.zip
- 转到并下载logback-1.0.7.zip
- 提取logback-1.0.7.zip
- 在eclipse中转到您的项目并右键单击它。选择属性
- 从左侧面板中选择Java构建路径
- 选择库
- 在Netbeans中转到您的项目并右键单击它。选择属性
- 从左侧面板中选择库
- 选择编译选项卡
- 单击添加Jar/文件夹
- 找到提取的文件夹,从logback-1.0.7文件夹添加logback-core-1.0.7.jar,logback-classic-1.0.7.jar,从slf4j-1.7.0文件夹添加slf4j-api-1.7.0.jar。单击“确定”返回到项目
使用日志框架 首先,您应该导入所需的依赖项:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
要记录的每个类都应该有一个专用记录器:
private final Logger logger = (Logger) LoggerFactory.getLogger(this.getClass())
通过为每个类提供一个单独的记录器,您可以提供更大的灵活性并更容易地更改日志记录级别(警告、错误、信息、调试)
根据您应该使用的日志级别
logger.info("Your info message");
logger.error("Your error message");
logger.debug("Your debug message");
logger.warn("Your warn message");
还可以根据需要使用更复杂的方法调用。例如,如果您想调试并同时显示应该使用的stacktrace
logger.debug("Your debug message",e);
(e stands for a catched exception).
例如:
try{
//some code
}catch (IOException e){
logger.debug("An IOException was thrown at this method ",e);
logger.error("An IOException was thrown at this method ",e);
}
*此时,在不添加任何其他配置的情况下,您就拥有了一个简单的日志系统。以防您需要更高级的配置
阅读我在下面发布的logback的高级设置
logback的高级设置 为了拥有更高级的日志记录系统,您应该创建一个包含所有日志记录配置的附加文件。对于这个示例,我将使用logback.xml。有关不同logback文件的更多信息,请参阅 此时,您应该创建一个名为resources的文件夹,并将其添加到项目的buildpath中 Eclipse指南
- 创建名为resources的文件夹(必须在项目中看到该文件夹)
- 在eclipse中转到您的项目并右键单击它。选择属性
- 从左侧面板中选择Java构建路径
- 选择源选项卡
- 单击添加文件夹
- 勾选已创建的资源文件夹,然后单击“确定”。单击“确定”返回到项目
- 此时,您应该将resources文件夹视为一个包
- 创建名为resources的文件夹(它在项目视图中还不可见..仅在文件视图中)
- 在Netbeans中转到您的项目并右键单击它。选择属性
- 从左侧面板中选择源
- 在源程序包文件夹中,单击添加文件夹
- 选择资源文件夹并单击确定
- 您应该可以看到作为包创建的文件夹
try{
//some code
}catch (IOException e){
logger.debug("An IOException was thrown at this method ",e);
logger.error("An IOException was thrown at this method ",e);
}
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>[%-5level] - %msg%n
</pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<append>false</append>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %class - %msg%n
</pattern>
</encoder>
<File>log/log.txt</File>
</appender>
<logger name="org.test" level="INFO" additivity="false">
<appender-ref ref="STDOUT" />
</logger>
<logger name="org.test" level="DEBUG" additivity="false">
<appender-ref ref="FILE" />
</logger>
<root level="OFF">
</root>