org.javabeanstack.log.LogManager Maven / Gradle / Ivy
/*
* JavaBeanStack FrameWork
*
* Copyright (C) 2017 Jorge Enciso
* Email: [email protected]
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.javabeanstack.log;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import org.apache.log4j.Logger;
import org.javabeanstack.data.IDataResult;
import org.javabeanstack.error.ErrorManager;
import org.javabeanstack.error.IErrorReg;
import org.javabeanstack.security.ISessionsLocal;
import org.javabeanstack.security.IUserSession;
import org.javabeanstack.util.Strings;
import org.javabeanstack.model.IAppMessage;
import org.javabeanstack.data.IGenericDAO;
import org.javabeanstack.model.IAppLogRecord;
/**
* Su función es gestionar la escritura y lectura del log del sistema.
*
* @author Jorge Enciso
*/
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class LogManager implements ILogManager {
private static final Logger LOGGER = Logger.getLogger(LogManager.class);
@EJB private IGenericDAO dao;
@EJB private ISessionsLocal sessions;
/**
* Escribe información de un evento en una tabla de la base de datos.
* @param
* @param logType
* @param sessionId identificador de la sesión del usuario
* @param message mensaje
* @param messageInfo información adicional del evento producido.
* @param messageNumber nro de mensaje (ver en AppMessage)
* @param category (Aplicación, seguridad, Datos)
IAppLogRecord.CATEGORY_APP, IAppLogRecord.CATEGORY_SECURITY, IAppLogRecord.CATEGORY_DATA
* @param level (Error, Informacion, Alerta)
IAppLogRecord.LEVEL_ERROR, IAppLogRecord. LEVEL_ALERT, IAppLogRecord.LEVEL_INFO
* @param object
* @param objectField
* @return verdadero si tuvo exito y falso si no.
*/
@Override
public boolean dbWrite(Class logType, String sessionId, String message,
String messageInfo, Integer messageNumber, String category,
String level, String object, String objectField) {
Integer lineNumber = 0;
Integer choose = 0;
return dbWrite(logType, sessionId, message, messageInfo, messageNumber, category,
level, object, objectField, lineNumber, choose);
}
/**
* Escribe información de un evento en una tabla de la base de datos.
* @param
* @param logType
* @param sessionId identificador de la sesión del usuario
* @param message mensaje
* @param messageInfo información adicional del evento producido.
* @param messageNumber nro de mensaje (ver en AppMessage)
* @param category (Aplicación, seguridad, Datos)
IAppLogRecord.CATEGORY_APP, IAppLogRecord.CATEGORY_SECURITY, IAppLogRecord.CATEGORY_DATA
* @param level (Error, Informacion, Alerta)
IAppLogRecord.LEVEL_ERROR, IAppLogRecord. LEVEL_ALERT, IAppLogRecord.LEVEL_INFO
* @param object
* @param lineNumber nro del linea del programa donde se produjo el evento.
* @param objectField
* @param choose acción elegida por el usuario ante un pedido de ignorar o cancelar
* @return verdadero si tuvo exito y falso si no.
*/
@Override
public boolean dbWrite(Class logType, String sessionId, String message, String messageInfo,
Integer messageNumber, String category, String level, String object,
String objectField, Integer lineNumber, Integer choose) {
try {
T logRecord = logType.newInstance();
logRecord.setCategory(category);
logRecord.setLevel(level);
logRecord.setMessage(message);
logRecord.setMessageInfo(messageInfo);
logRecord.setMessageNumber(messageNumber);
logRecord.setObject(object);
logRecord.setObjectField(objectField);
logRecord.setLineNumber(lineNumber);
logRecord.setChoose(choose);
return dbWrite(logRecord, sessionId);
} catch (Exception exp) {
ErrorManager.showError(exp, LOGGER);
}
return false;
}
/**
* Escribe información de un evento en una tabla de la base de datos.
* @param
* @param logType
* @param errorReg objeto error conteniendo la información del evento.
* @param sessionId identificador de la sesión del usuario
* @return verdadero si tuvo exito y falso si no.
*/
@Override
public boolean dbWrite(Class logType, String sessionId, IErrorReg errorReg) {
try {
T logRecord = logType.newInstance();
String messageInfo = "";
if (errorReg.getException() != null) {
messageInfo = ErrorManager.getStackCause(errorReg.getException());
}
if (Strings.isNullorEmpty(errorReg.getFieldName())){
logRecord.setCategory(IAppLogRecord.CATEGORY_APP);
}
else {
logRecord.setCategory(IAppLogRecord.CATEGORY_DATA);
}
logRecord.setLevel(IAppLogRecord.LEVEL_ERROR);
logRecord.setMessage(errorReg.getMessage());
logRecord.setMessageInfo(messageInfo);
logRecord.setMessageNumber(errorReg.getErrorNumber());
logRecord.setObject(errorReg.getEntity());
logRecord.setObjectField(errorReg.getFieldName());
logRecord.setLineNumber(0);
logRecord.setChoose(0);
return dbWrite(logRecord, sessionId);
} catch (Exception exp) {
ErrorManager.showError(exp, LOGGER);
}
return false;
}
/**
* Escribe información de un evento en una tabla de la base de datos.
* @param
* @param logType
* @param exp objeto error conteniendo información del evento.
* @param sessionId identificador de la sesión del usuario
* @return verdadero si tuvo exito y falso si no.
*/
@Override
public boolean dbWrite(Class logType, String sessionId, Exception exp) {
try {
T logRecord = logType.newInstance();
String messageInfo = ErrorManager.getStackCause(exp);
logRecord.setCategory(IAppLogRecord.CATEGORY_APP);
logRecord.setLevel(IAppLogRecord.LEVEL_ERROR);
logRecord.setMessage(exp.getMessage());
logRecord.setMessageInfo(messageInfo);
logRecord.setMessageNumber(0);
logRecord.setObject("");
logRecord.setObjectField("");
logRecord.setLineNumber(0);
logRecord.setChoose(0);
return dbWrite(logRecord, sessionId);
} catch (Exception ex) {
ErrorManager.showError(ex, LOGGER);
}
return false;
}
/**
* Escribe información de un evento en una tabla de la base de datos.
*
* @param
* @param logRecord registro del evento.
* @param sessionId identificador de la sesión del usuario
* @return verdadero si tuvo exito y falso si no.
*/
@Override
public boolean dbWrite(T logRecord, String sessionId) {
String sesionId = "NINGUNA";
Long idcompany = null;
Long iduser = null;
String origin = "";
if (!Strings.isNullorEmpty(sessionId)) {
IUserSession userSession = sessions.getUserSession(sessionId);
if (userSession != null) {
idcompany = userSession.getIdCompany();
iduser = userSession.getUser().getIduser();
origin = userSession.getIp();
sesionId = Strings.dateToString(userSession.getTimeLogin())
+ userSession.getUser().getLogin().trim();
}
}
logRecord.setIdcompany(idcompany);
logRecord.setIduser(iduser);
logRecord.setSessionId(sesionId);
logRecord.setOrigin(origin);
if (logRecord.getLogTimeOrigin() == null){
logRecord.setLogTimeOrigin(new Date());
}
IDataResult dataResult;
try {
dataResult = dao.persist(null, logRecord);
return dataResult.isSuccessFul();
} catch (Exception ex) {
ErrorManager.showError(ex, LOGGER);
}
return false;
}
@Override
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public boolean fWrite(String message, String file, boolean flag) {
return true;
}
@Override
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public boolean logSend() {
return true;
}
/**
* Busca en una tabla de mensajes en la base de datos "AppMessage"
* el nro. de mensaje y devuelve el registro
*
* @param msgNumber nro. de mensaje
* @return Mensaje solicitado
*/
@Override
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public IAppMessage getAppMessage(Integer msgNumber) {
try {
IAppMessage message =
dao.findByQuery(null,
"select o from AppMessage o where nro = " + msgNumber.toString(),
null);
return message;
} catch (Exception exp) {
ErrorManager.showError(exp, LOGGER);
}
return null;
}
/**
* Busca en una tabla de mensajes en la base de datos "AppMessage"
* el nro. de mensaje y devuelve el registro
*
* @return Mensaje solicitado
*/
@Override
@TransactionAttribute(TransactionAttributeType.SUPPORTS)
public List getAppMessages() {
try {
List messages =
dao.findListByQuery(null,
"select o from AppMessage o order by nro",
null);
return messages;
} catch (Exception exp) {
ErrorManager.showError(exp, LOGGER);
}
return new ArrayList();
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy