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

Java 如何将每个请求记录到csv文件,java,csv,opencsv,Java,Csv,Opencsv,我正在开发一个RESTAPI,我想将所有调用写入一个csv文件。因此,我使用该库并编写了以下代码: CSVWriter writer; Map<String, Object> resultMap = new HashMap<String, Object>(); @RequestMapping(value="/data",produces={MediaType.APPLICATION_JSON_VALUE},method=RequestMethod.GET)

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

   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();
        }

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

最好将它们记录在单独的日志文件中。检查记录器集成。但由于请求更多,文件量将更多。最后,如果它是一个文件,那么在需要时可以很容易地将该文件作为csv导入数据库。@Ricky-但是如果您的API收到许多调用,并且每个调用都需要等待写入csv文件,那么它可能会成为一个严重的瓶颈。cody123是正确的,请检查如何进行正确的日志记录。但是在csv中写一行并不需要太多时间,如果我是正确的,您是指logger.infoapi调用请求作为正确的日志记录吗