AdminlogFile.java
package sk.iway.iwcm;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.LinkedList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import sk.iway.iwcm.i18n.Prop;
/**
* AdminlogFile.java
* Ticket 11595
* Zapis Auditlogov do suboru pre potreby Tatrabanky.
*
* Zapisuje zaznamy auditLogu do .log suboru. Cesta k suboru sa zaznamenava v konfiguracnej premennej 'auditFileLocation'
* format zapisu je nasledovny:
* datum a cas udalosti - format: yyyy-mm-dd HH:mm:ss|zatial konstanta - SessioID|UserId|konstanta - 0|remoteIp|AuditLogGateway|konstanta nastavuje sa v konfiguracii - browser|konstanta nastavuje sa v konfiguracii - audit|Typ logu|funkcia - totozne s predchadz.zaznamom| textovy popis udalosti |konstanta - OK
*
*@Title webjet7
*@Company Interway s.r.o. (www.interway.sk)
*@Copyright Interway s.r.o. (c) 2001-2012
*@author $Author: mbocko $
*@version $Revision: 1.3 $
*@created Date: 3.8.2012 9:13:21
*@modified $Date: 2004/08/16 06:26:11 $
*/
public class AdminlogFile
{
private static LinkedList<String> fifo = new LinkedList<String>(); //uklada zaznamy do fifo pre pripad zlyhania zapisu suboru
private AdminlogFile() { } //volaju sa iba staticke metody, nieje ziaduce aby bolo mozne vytvarat instancie
/**
* @param timestamp
* @param userId
* @param remoteIp
* @param logType
* @param description
*/
public static void write(Timestamp timestamp, RequestBean requestBean, int logType, String description)
{
String fileLoc = Constants.getString("auditFileLocation");
if(fileLoc.length()<5)
{
return;
}
String logItem = null;
String logItemsSeparator = Constants.getString("auditLogSeparator");
Pattern patternToSearch = Pattern.compile("[.][A-Za-z-_]*[.]");
Matcher matcher = patternToSearch.matcher(fileLoc);
if(matcher.find())
{
String datePattern = matcher.group();
datePattern = datePattern.substring(1, datePattern.length() - 1);
String date = new SimpleDateFormat(datePattern).format(timestamp);
fileLoc = fileLoc.replaceFirst(datePattern, date);
}
String logTypeName = Prop.getInstance().getText("components.adminlog."+logType);
logItem = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(timestamp);
logItem += logItemsSeparator;
logItem += requestBean.getSessionId(); //sessionID
logItem += logItemsSeparator;
int userId = requestBean.getUserId();
logItem += (userId!=0) ? (String.valueOf(userId)) : ("-1");//vracia userId, ak nieje prihlaseny, vracia -1
logItem += logItemsSeparator;
logItem += "0";//tallerId - konstanta
logItem += logItemsSeparator;
logItem += requestBean.getRemoteIP();//remoteIp
logItem += logItemsSeparator;
logItem += Constants.getString("auditLogGateway")+Constants.getString("clusterMyNodeName");
logItem += logItemsSeparator;
logItem += Constants.getString("auditLogClient");
logItem += logItemsSeparator;
logItem += Constants.getString("auditLogtype");
logItem += logItemsSeparator;
logItem += logTypeName;
logItem += logItemsSeparator;
logItem += logTypeName;
logItem += logItemsSeparator;
description = description.replaceAll("\n", " ");
description = description.replaceAll("\r", " ");
logItem += description;
logItem += logItemsSeparator;
logItem += "OK";
fifo.addLast(logItem);//ulozi zaznam do fifo, aby zostal pristupny v pripade zlyhania zapisu do suboru
FileOutputStream fos = null;
OutputStreamWriter osw = null;
try
{
File f = new File(fileLoc);
if (f.exists()==false) f.createNewFile();
fos = new FileOutputStream(fileLoc, true);
//poziadavka z TB, aby sa subor zapisal v specifikovanom kodovani
osw = new OutputStreamWriter(fos, Constants.getString("auditLogEncoding"));
for(String row : fifo)
{
osw.write(row+"\n");
}
osw.close();
osw = null;
fos.close();
fos = null;
fifo.clear();//ak sa nevyhodi vynimka IOException, vymaze sa obsah FIFO, v opacnom pripade sa pokusa zapisat obsah fifa pri dalsom pokuse
}
catch (IOException e)
{
Logger.error(AdminlogFile.class, "!!! Nieje mozne zapisovat do suboru: "+fileLoc+"\n");
for(String row : fifo)
{
Logger.debug(AdminlogFile.class, "!!! Adminlog Item: "+row+"\n");
}
}
finally
{
if (fos != null) try { fos.close(); } catch (Exception ex) { sk.iway.iwcm.Logger.error(ex); }
if (osw != null) try { osw.close(); } catch (Exception ex) { sk.iway.iwcm.Logger.error(ex); }
}
}
}