如何将每个请求记录到CSV文件



我正在开发一个REST API,我想将所有调用写入CSV文件。因此,我使用OpenCSV库,并编写了以下代码:

   CSVWriter writer;
   Map<String, Object> resultMap = new HashMap<String, Object>();
@RequestMapping(value="/data",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)
    public ResponseEntity<Map<String, Object>> getdata(@RequestParam("id")int id,@RequestParam("user")String user) throws IOException{             
            String[] log = new String[1];
            log[0]=id+","+"+user+","+new Timestamp(System.currentTimeMillis())+",";
            writer.writeNext(log);
            writer.flushQuietly();
                //....rest code here 
return new ResponseEntity<Map<String, Object>>(resultMap,HttpStatus.OK);
}

,但这只会打印一些,并且没有将所有请求打印到CSV。任何帮助都将不胜感激。

我建议的第一件事就是用文件作者替换csvwriter,然后查看您是否遇到相同的问题。这应该不是问题,因为您并不是真正的记录为CSV文件,而是一个带有逗号的列的CSV文件。

您的服务是多线程的吗?如果是这样,请更改您的代码,以便在同步块中完成CSV记录部分:

        synchronize(this) {
           String[] log = new String[3];
           log[0] = id;
           log[1] = user;
           log[2] = new Timestamp(System.currentTimeMillis());
           writer.writeNext(log);
           writer.flushQuietly();
        }

原因是我想知道是否存在并发问题,这样一次只能记录一个线程。

最新更新