001/* 002 * jPOS Project [http://jpos.org] 003 * Copyright (C) 2000-2026 jPOS Software SRL 004 * 005 * This program is free software: you can redistribute it and/or modify 006 * it under the terms of the GNU Affero General Public License as 007 * published by the Free Software Foundation, either version 3 of the 008 * License, or (at your option) any later version. 009 * 010 * This program is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 013 * GNU Affero General Public License for more details. 014 * 015 * You should have received a copy of the GNU Affero General Public License 016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 017 */ 018 019package org.jpos.tlv.packager; 020 021 022import org.jpos.core.Configurable; 023import org.jpos.core.Configuration; 024import org.jpos.core.ConfigurationException; 025import org.jpos.iso.ISOComponent; 026import org.jpos.iso.ISOException; 027import org.jpos.util.LogEvent; 028import org.jpos.util.LogSource; 029import org.jpos.util.Logger; 030 031import java.io.ByteArrayOutputStream; 032import java.io.PrintStream; 033 034 035/** 036 * @author Vishnu Pillai 037 */ 038public class PackagerErrorLogger implements PackagerErrorHandler, Configurable, LogSource { 039 040 private Logger logger = Logger.getLogger("PACKAGER_ERROR_LOGGER"); 041 private String realm; 042 043 @Override 044 public void setLogger(Logger logger, String realm) { 045 this.logger = logger; 046 } 047 048 @Override 049 public String getRealm() { 050 return realm; 051 } 052 053 @Override 054 public Logger getLogger() { 055 return logger; 056 } 057 058 @Override 059 public void setConfiguration(Configuration cfg) throws ConfigurationException { 060 String loggerName = cfg.get("packager-error-logger"); 061 logger = Logger.getLogger(loggerName); 062 realm = cfg.get("realm", "packager-error"); 063 } 064 065 @Override 066 public void handlePackError(ISOComponent m, ISOException e) { 067 StringBuilder sb = new StringBuilder("Error packing message:\n"); 068 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 069 PrintStream ps = new PrintStream(baos); 070 m.dump(ps, ""); 071 sb.append(e.toString()).append("\n"); 072 sb.append("Message dump:\n").append(new String(baos.toByteArray())).append("\n"); 073 LogEvent logEvent = new LogEvent(this, "pack-error"); 074 logEvent.addMessage(sb.toString()); 075 logEvent.addMessage(e); 076 Logger.log(logEvent); 077 } 078 079 @Override 080 public void handleUnpackError(ISOComponent isoComponent, byte[] msg, ISOException e) { 081 StringBuilder sb = new StringBuilder("Error unpacking message:\n"); 082 sb.append(e.toString()).append("\n"); 083 sb.append("Raw data:\n").append(new String(msg)).append("\n"); 084 LogEvent logEvent = new LogEvent(this, "unpack-error"); 085 logEvent.addMessage(sb.toString()); 086 logEvent.addMessage(e); 087 Logger.log(logEvent); 088 } 089}