从零开始,构建电子地图网站:0_10_try-catch+配置log日志

江枫思渺然 提交于 2020-03-10 00:26:51

接上篇,给程序加上注释、try-catch、log日志等。

 

注释非常简单。

在接口方法上输入/**,按下回车,该写什么就写什么吧。

 

Try-catch

在觉得会出问题的地方,加上try-catch,try没成功,就会catch异常,将异常log出来,用以排查问题。

 

我把注释、try-catch、log都加在了controller上。

 

 

 

一、新建日志配置文件

在resource下新建logback-boot.xml文件。

D:\gismap\java\gismap\src\main\resources\logback-boot.xml

别的都使用默认的就好,注意logger name="com.history.gismap",配置成自己的包名。

 

<configuration>
   
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
    <!-- appender是configuration的子节点,是负责写日志的组件。 -->
    <!-- ConsoleAppender:把日志输出到控制台 -->
   
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
%d %p (%file:%line\)- %m%n</pattern>
           
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
           
<charset>UTF-8</charset>
        </encoder>
    </appender>
   
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
    <!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log -->
    <!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1024KB时,对当前日志进行分割 重命名-->
   
<appender name="syslog"
             
class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>
log/sys.log</File>
       
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
        <!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
       
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
            <!-- 文件名:log/sys.2019-08-11.5.log -->
            
<fileNamePattern>log/sys.%d.%i.log</fileNamePattern>
           
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
           
<maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy 
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,设置为1024KB -->
               
<maxFileSize>1024KB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
           
<!-- pattern节点,用来设置日志的输入格式 -->
            
<pattern>
               
%d %p (%file:%line\)- %m%n
           
</pattern>
           
<!-- 记录日志的编码 -->
           
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
       
</encoder>
    </appender>
   
<!-- 控制台输出日志级别,级别大于info的日志都会被输出 -->
   
<root level="info">
        <appender-ref
ref="STDOUT" />
    </root>
   
<!-- 指定项目包gismap,当有日志操作行为时的日志记录级别 -->
    <!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  -->
   
<logger name="com.history.gismap" level="info">
        <appender-ref
ref="syslog" />
    </logger>
</configuration>

 

 

二、在application中引入日志配置

D:\gismap\java\gismap\src\main\resources\application.yml

在application.yml中引入log配置文件,这样才能在启动的时候被加载。

logging:

  config: classpath:logback-boot.xml

 

server:

  port: 8080



#数据库配置

spring:

  datasource:

    #alibaba数据连接池

    type: com.alibaba.druid.pool.DruidDataSource

    #postgresql驱动

    driverClassName: org.postgresql.Driver

    #数据库地址、账号、密码

    url: jdbc:postgresql://127.0.0.1:5432/postgres

    username: postgres

    password: 123456

    druid:

      #初始化连接大小

      initial-size: 8

      #最小空闲连接数

      min-idle: 5

      #最大连接数

      max-active: 10

      #查询超时时间

      query-timeout: 6000

      #事务查询超时时间

      transaction-query-timeout: 6000

      #关闭空闲连接超时时间

      remove-abandoned-timeout: 1800

      filters: stat,config



mybatis:

  #sql映射文件

  mapper-locations: classpath:mapper/*.xml

  #model

  type-aliases-package: com.history.gismap.model

#log日志配置

logging:

  config: classpath:logback-boot.xml

 

 

 

 

三、修改controller类

 

D:\gismap\java\gismap\src\main\java\com\history\gismap\controller\MapController.java

这里加上了try-catch,如果try有问题,catch就会抛出一个异常,把这个异常log.error打印出来。

注意加了一个注释@Slf4j,这个是日志能打印出来的关键。

 

package com.history.gismap.controller;

import com.alibaba.fastjson.JSONArray;

import com.alibaba.fastjson.JSONObject;

import com.history.gismap.model.GeometryModel;

import com.history.gismap.service.MapService;

import com.vividsolutions.jts.geom.Coordinate;

import com.vividsolutions.jts.geom.Geometry;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.*;

import java.util.List;



@Controller

@RequestMapping(value = "/history")

@Slf4j

public class MapController {

    @Autowired

    private MapService mapService;

    /**

     * 根据表名和时间区间输出对象

     * @param category 表名简写

     * @param start 起始时间

     * @param end 终止时间

     * @return

     */

    @ResponseBody

    @GetMapping("/geometry")

    public JSONObject getPoint(@RequestParam("category") String category,@RequestParam("start") Integer start,@RequestParam("end") Integer end){

        try {

            List<GeometryModel> result=mapService.getDynastyGeom(category,start,end);

            JSONObject jsonObject=new JSONObject();

            jsonObject.put("number",result.size());

            JSONArray jsonArray=new JSONArray();

            for (GeometryModel g:result) {

                JSONObject geom=new JSONObject();

                geom.put("gid",g.getGId());

                geom.put("namepy",g.getNamePy());

                geom.put("namech",g.getNameCh());

                geom.put("nameft",g.getNameFt());

                geom.put("presloc",g.getPresLoc());

                geom.put("typepy",g.getTypePy());

                geom.put("typech",g.getTypeCh());

                geom.put("levrank",g.getLevRank());

                geom.put("begyr",g.getBegYr());

                geom.put("begrule",g.getBegRule());

                geom.put("endyr",g.getEndYr());

                geom.put("endrule",g.getEndRule());

                geom.put("geosrc",g.getGeoSrc());

                geom.put("compiler",g.getCompiler());

                geom.put("gecomplr",g.getGecomplr());

                geom.put("checker",g.getChecker());

                geom.put("entdate",g.getEntDate());

                geom.put("begchgty",g.getBegChgTy());

                geom.put("endchgty",g.getEndChgTy());

                geom.put("geometry",g.getGeometry().toString());

                jsonArray.add(geom);

            }

            jsonObject.put("list",jsonArray);

            log.info("入参类别:{},起始时间:{},截至时间:{}",category,start,end);

            return jsonObject;

        }catch (Exception e){

            log.error("程序错误类型:",e);

            return null;

        }

    }

    private JSONObject geometryToJson(Geometry geometry){

        JSONObject jsonObject=new JSONObject();

        jsonObject.put("type",geometry.getGeometryType());

        JSONArray coorList=new JSONArray();

        for (int i=0;i<geometry.getNumGeometries();i++){

            JSONArray coors=new JSONArray();

            Coordinate[] coordinates=geometry.getGeometryN(i).getCoordinates();

            for (Coordinate c:coordinates) {

                JSONObject jsonObjectCoor=new JSONObject();

                jsonObjectCoor.put("lng",c.x);

                jsonObjectCoor.put("lat",c.y);

                coors.add(jsonObjectCoor);

            }

            coorList.add(coors);

        }

        jsonObject.put("coordinates",coorList);

        return jsonObject;

    }

}

 

 

git:https://github.com/yimengyao13/gismap.git,分支logger。

 

 

好了,到此,后端应该完成了,接下来,我们要进行前端搭建了。

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!