vs2017 网站开发环境,网站模板用什么软件做,衡阳网站建设 千度网络,wordpress的搭建环境搭建1.选择恰当的日志级别2.输出明确的提示文字和充分的现场信息3.输出内容一行搞定#xff0c;不要换行4.其他1.选择恰当的日志级别选择日志级别时需要遵循一些通用规范#xff0c;不可随意定义log4j的日志级别#xff0c;由低到高排列#xff1a;all trace debug info warn e…1.选择恰当的日志级别2.输出明确的提示文字和充分的现场信息3.输出内容一行搞定不要换行4.其他1.选择恰当的日志级别选择日志级别时需要遵循一些通用规范不可随意定义log4j的日志级别由低到高排列all trace debug info warn error fatal off其中all off仅用以log4j配置文件中开启或关闭所有日志trace fatal一般也用不到对于开发人员来说只需要关注debug info warn errordebug正常情况下不需要输出只有当出问题时才需要输出的日志信息由于生产环境无法单步调试可以把debug级别的日志想象成你在生成环境中debuginfo可能要关注或者只有比较重要的信息才需要输出如用户登录、退出、后台job执行时长等warn存在一些潜在的危险时输出的日志比如请求参数中包含攻击注入脚本error如请求数据库时的SQL异常当然最好的方法还是参考优秀的开源代码2.输出明确的提示文字和充分的现场信息要点1)明确的提示文字看到这段提示文本就可以知道发生了什么不需要再去扒拉源码2)充分的现场信息如用户信息、引发异常的参数值、异常栈信息等举例LOG.warn(Unknown value for includeParams parameter to URL tag: includeParams);LOG.warn(Unable to put request parameters ( extractQueryString() ) into parameter map., e);LOG.warn(Could not find token mapped to token name tokenName);3.一条日志一行搞定这个是为了方便跟踪和分析日志使用grep命令时不至于仅看到一条日志的部分内容4.其他4.1.尽量使用一套日志接口强烈推荐slf4j两大理由1)使用{}占位符避免字符串拼接以刚才三个log为例LOG.warn(Unknown value for includeParams parameter to URL tag: includeParams);LOG.warn(Unable to put request parameters ( extractQueryString() ) into parameter map., e);LOG.warn(Could not find token mapped to token name tokenName);如果改用slf4j的话写法如下log.warn(Unknown value for includeParams parameter to URL tag: {}, includeParams);log.warn(Unable to put request parameters ({}) into parameter map., extractQueryString(), e);log.warn(Could not find token mapped to token name {}, tokenName);2)执行实际日志输出前强制检查log是否开启组合使用log4jslf4j时执行的warn方法实际是这样的:public void warn(String format, Object arg) {if (logger.isEnabledFor(Level.WARN)) {FormattingTuple ft MessageFormatter.format(format, arg);logger.log(FQCN, Level.WARN, ft.getMessage(), ft.getThrowable());}}4.2.不要使用System.out.println()这个就不多说了日志中看到一句莫名其妙hello,world你会怎么想怎么查4.3.不要使用e.printStackTrace()这种打印只能输出到catalina.out中无法单独制定输出目的文件还会导致日志输出混乱4.4.slf4j打印异常堆栈信息两个例子try{if (true) {throw new RuntimeException(im ok);}}catch(Exception e) {log.error(Error. param:{}, param2:{}, param3:{}, param, param2, param3, e);}将打印ERROR 2015-01-17 15:11:51,426 Error. param:0, param2:2, param3:false [cn.xxt.log.test.Slf4jTest.main(Slf4jTest.java:36)]java.lang.RuntimeException: im okat cn.xxt.log.test.Slf4jTest.main(Slf4jTest.java:33)try{if (true) {throw new RuntimeException(im sorry);}}catch(Exception e) {log.error(Error. param:{}, param2:{}, param3:{}, {}, param, param2, param3, e);}将打印ERROR 2015-01-17 15:11:51,429 Error. param:0, param2:2, param3:false, java.lang.RuntimeException: im sorry [cn.xxt.log.test.Slf4jTest.main(Slf4jTest.java:44)]差异前者输出了异常栈信息后者没有原因后者用{}占位符打印异常对象e导致异常栈信息没有输出参考文档