Tenho uma servlet que chama um outro objeto e neste objeto ele faz um log com Log4j, sendo que a cada requisição feita no log ele grava mais de uma vez.
Por exemplo fiz uma chamada a servlet, logo depois de reiniciar o tomcat, e foi gravado no log 1x só.
Na segunda a chamada a mesma servlet, foi gravado no log 2 vezes a mesma linha.
Você poderia ser mais preciso, exemplo, mostrando as partes dos código envolvidos?
J
Jedi_FeniXPJ
Tenho uma servlete que chama um objeto. que abre um arquivo e grava dados nele, e este mesmo objeto gera um log també. Abaixo estão os códigos da servlet e do ojeto.
importjava.io.BufferedWriter;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importorg.apache.log4j.BasicConfigurator;importorg.apache.log4j.FileAppender;importorg.apache.log4j.Level;importorg.apache.log4j.Logger;importorg.apache.log4j.PatternLayout;importutil.BrazilCalendar;publicclassControlFile{privateStringquery;privateStringip;privateFilefile;privateBrazilCalendarbrazilCalendar;privateStringtoken;privatestaticfinalLoggerLOGGER=Logger.getLogger(ControlFile.class);privatestaticStringFILE_NAME_MO=null;privatestaticFileAppenderFILE_APPENDER_LOG=null;privatestaticFileFILE=null;privatestaticBufferedWriterWRITER_FILE=null;privatestaticFileOutputStreamOUT_FOR_FILE=null;//public static FileOutputStream CONNECTION_FILE = null;publicstaticStringPATH_TXT="./txt/";publicstaticStringPATH_LOG="./logs/";publicstaticStringLAYOUT_LOG="%d{yyyy-M-dd HH:mm:ss} [%t] %p %c %x - %m%n";publicstaticStringPREFIX_FILE_LOG="catcher";publicControlFile(){super();this.token="["+newBrazilCalendar().getFullDateForSystemWithHour("").replace(" ","").replace(":","")+Math.random()+"]";BasicConfigurator.configure();PatternLayoutpatternLayout=newPatternLayout(Catcher.LAYOUT_LOG);Catcher.LOGGER.setLevel(Level.INFO);try{this.brazilCalendar=newBrazilCalendar();if(Catcher.FILE_APPENDER_LOG==null){ControlFile.FILE_APPENDER_LOG=newFileAppender(patternLayout,Catcher.PATH_LOG+Catcher.PREFIX_FILE_LOG+this.brazilCalendar.getFullDateForSystem("")+".log");}ConrolFile.LOGGER.addAppender(ControlFile.FILE_APPENDER_LOG);ControlFile.LOGGER.debug(this.token+"TIME START: "+this.brazilCalendar.getFullDateForSystemWithHour("-"));}catch(IOExceptione){Catcher.LOGGER.error("CANNOT OPEN FILE LOG");Catcher.LOGGER.error(e.getMessage());}}publicControlFile(Stringquery){this();this.setQuery(query);}publicControlFile(Stringip,Stringquery){this(query);this.setIp(ip);}/** * @return the query */publicStringgetQuery(){returnquery;}/** * @param query the query to set */publicvoidsetQuery(Stringquery){this.query=query;ControlFile.LOGGER.info("SET QUERY: "+this.query);}/** * @return the ip */publicStringgetIp(){returnip;}/** * @param ip the ip to set */publicvoidsetIp(Stringip){this.ip=ip;ControlFile.LOGGER.info("SET PLEXIP: "+this.ip);}publicvoidsaveMoQueueInDisk(){BrazilCalendarbrazilCalendar=newBrazilCalendar();StringfileName="moqueue"+brazilCalendar.getFullDateForSystem("")+".txt";if(ControlFile.FILE_NAME_MO==null&&ControlFile.FILE_NAME_MO!=fileName){ControlFile.FILE_NAME_MO=fileName;ControlFile.FILE=newFile(ControlFile.PATH_TXT+ControlFile.FILE_NAME_MO);}if(!ControlFile.FILE.exists()){try{ControlFile.FILE.createNewFile();ControlFile.LOGGER.info(this.token+"FILE CREATED");}catch(IOExceptione){ControlFile.LOGGER.error(this.token+"CANNOT CREATE FILE");}}try{if(ControlFile.OUT_FOR_FILE==null){Catcher.OUT_FOR_FILE=newFileOutputStream(Catcher.FILE,true);}ControlFile.LOGGER.info(this.token+" FILE OPEN: "+Catcher.OUT_FOR_FILE.toString());StringforFile=brazilCalendar.getFullDateForSystemWithHour("-")+" "+this.ip+" "+this.query+"\n";ControlFile.OUT_FOR_FILE.write(forFile.getBytes());ControlFile.LOGGER.info(this.token+" DATA SAVED");//ControlFile.OUT_FOR_FILE.close();}catch(FileNotFoundExceptione){ControlFile.LOGGER.error(this.token+" MESSAGE: "+e.getMessage());ControlFile.LOGGER.error(this.token+" CAUSE: "+e.getCause());}catch(IOExceptione){ControlFile.LOGGER.error(this.token+" MESSAGE: "+e.getMessage());ControlFile.LOGGER.error(this.token+" CAUSE: "+e.getCause());}finally{ControlFileLOGGER.debug(this.token+"END TIME: "+this.brazilCalendar.getFullDateForSystemWithHour("-"));}}}
Aonde tem ControlFile.LOGGER.info ou ControlFile.LOGGER.debug sempre grava 2 ou mais linhas iguais no log.
E aproveitando no ControlFile eu usu java.io para gravar dados em um arquivo, qual seria melhor o java.nio.BufferWriter?
E eu recebi alguns erros no tomcat assim too many open file(file.log) e acabei colocando o appender um atributo static, essa é a melhor solução ou teria alguma outra melhor?
Desde já agradeço a ajuda de todos.