新手提问: 自己写的代码有错误,IDEA控制台能看到报错信息。当项目上线后,这个错误信息要怎么捕获并保存?

wow334 2023-12-05 14:42:41

新手提问: 自己写的代码有错误,IDEA控制台能看到报错信息。当项目上线后,这个错误信息要怎么捕获并保存?

 

 

就像红线这种自己写的错误代码,运行时导致的控制台出现的报错信息

 

 

 

...全文
3037 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

咱们线上运行的Java项目一般都会搭配相对应的日志框架,像Logback、Log4j等等,可以把错误日志保存到文件里,方便查看跟踪,以log4j为例子:

  1. 引入Maven org.apache.logging.log4j log4j-core 2.14.1
org.apache.logging.log4j log4j-slf4j-impl 2.14.1
  1. 资源根目录下配置xml:
<?xml version="1.0" encoding="UTF-8"?>

<!--
    status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
    monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<Configuration status="WARN" monitorInterval="300">
    <!-- 自定义变量 START-->
    <Properties>
        <!-- 配置日志文件输出目录 -->
        <Property name="LOG_HOME">/home/logs/fenxiang</Property>
        <!-- 日志文件名 -->
        <property name="LOG_NAME">service.log</property>
    </Properties>
    <!-- 自定义变量 END-->

    <!-- 日志输出器 START-->
    <Appenders>
        <!--控制台日志输出器 -->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <!-- 输出日志的格式 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c{1}[%M %L] %msg%xEx%n"/>
        </Console>

        <!-- 应用日志输出器 ,并配置日志压缩格式(应用名.log.年-月-日.gz) -->
        <RollingRandomAccessFile name="fileAppender"
                                 immediateFlush="true" fileName="${LOG_HOME}/${LOG_NAME}"
                                 filePattern="${LOG_HOME}/${LOG_NAME}.%d{yyyy-MM-dd}.log.gz">
            <!--
                %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间
                %p : 日志输出格式
                %c : logger的名称
                %m : 日志内容,即 logger.info("common")
                %n : 换行符
                %C : Java类名
                %L : 日志输出所在行数
                %M : 日志输出所在方法名
                hostName : 本地机器名
                hostAddress : 本地ip地址
             -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %c{1}[%M %L] %msg%xEx%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            </Policies>
        </RollingRandomAccessFile>
    </Appenders>
    <!-- 日志输出器 END-->


    <!-- 日志实例 START-->
    <Loggers>
        <!-- 根节点日志 -->
        <Root level="info">
            <appender-ref ref="consoleAppender"/>
            <appender-ref ref="fileAppender"/>
        </Root>

        <!-- 第三方日志系统 -->
        <Logger name="java.sql" additivity="false">
            <AppenderRef ref="consoleAppender" level="DEBUG" />
            <AppenderRef ref="fileAppender" level="INFO" />
        </Logger>
        <Logger name="org.springframework" additivity="false">
            <AppenderRef ref="consoleAppender" level="DEBUG" />
            <AppenderRef ref="fileAppender" level="INFO" />
        </Logger>
        <Logger name="org.eclipse.jetty" additivity="false">
            <AppenderRef ref="consoleAppender" level="DEBUG" />
            <AppenderRef ref="fileAppender" level="INFO" />
        </Logger>
        <Logger name="org.apache" additivity="false">
            <AppenderRef ref="consoleAppender" level="INFO" />
            <AppenderRef ref="fileAppender" level="INFO" />
        </Logger>
        <Logger name="com.alibaba" additivity="false">
            <AppenderRef ref="consoleAppender" level="INFO" />
            <AppenderRef ref="fileAppender" level="INFO" />
        </Logger>
        <Logger name="org.study" additivity="false">
            <AppenderRef ref="consoleAppender" level="DEBUG" />
            <AppenderRef ref="fileAppender" level="INFO" />
        </Logger>
    </Loggers>
    <!-- 日志实例 END-->
</Configuration>


小狗蛋ing 2023-12-08
  • 打赏
  • 举报
回复

腾讯bugly 导入依赖,初始化就能检测到了,啥也不用加

wow334 2023-12-08
  • 举报
回复
@小狗蛋ing 好的,谢谢! 我试试
Wlq0415 2023-12-05
  • 打赏
  • 举报
回复

使用日志记录器来捕获和保存错误信息,用Log4j或者SLF4J

wow334 2023-12-05
  • 举报
回复
@Wlq0415 好的,谢谢! 比如上图红圈处的报错信息可以保存吗?
Wlq0415 2023-12-06
  • 举报
回复
@wow334 try { // 你的代码 } catch (Exception e) { logger.error("发生错误", e); }
Wlq0415 2023-12-06
  • 举报
回复
@wow334 还有配置信息设置好 &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;Configuration status="WARN"&gt; &lt;Appenders&gt; &lt;File name="File" fileName="logs/mylog.log"&gt; &lt;PatternLayout pattern="%d [%t] %-5level %logger{36} - %msg%n"/&gt; &lt;/File&gt; &lt;/Appenders&gt; &lt;Loggers&gt; &lt;Root level="error"&gt; &lt;AppenderRef ref="File"/&gt; &lt;/Root&gt; &lt;/Loggers&gt; &lt;/Configuration&gt;
1条回复

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧