Вам нужно создать экземпляр вашего логгера и логлайстеров только один раз в вашем приложении.
Один из вариантов - использовать Logger.getLogger()
для регистрации и создания вашего регистратора.
Сначала вам нужно создать регистратор только один раз в вашем приложении, например, с помощью метода, подобного этому
public void initLogger() {
Logger logger = Logger.getLogger("Q2"); //this creates a logger and register it with Q2 name
org.jpos.util.DailyLogListener dayLog = new org.jpos.util.DailyLogListener();
ProtectedLogListener pll = new ProtectedLogListener();
Configuration protectLogCfg = new SimpleConfiguration();
protectLogCfg.put("protect", "2");
pll.setConfiguration(protectLogCfg);
logger.addListener(pll);
Configuration dayLogCfg = new SimpleConfiguration();
dayLogCfg.put("window", "86400");
dayLogCfg.put("prefix", logLocation);
dayLogCfg.put("suffix", ".log");
dayLogCfg.put("date-format", "-yyyy-MM-dd");
dayLog.setConfiguration(dayLogCfg);
logger.addListener(dayLog);
logger.addListener(new SimpleLogListener(System.out));
//all set now logger is accessible via Logger.getLogger
}
Затем, когда вы создаете новый канал, все что вам нужно, это установить ранее созданный регистратор:
public class Iso8583MessageBOKImpl implements Iso8583Message{
...
org.jpos.iso.ISOPackager customPackager = new GenericPackager(isoPackagerLocation+iso8583Properties.getPackager());
BaseChannel channel = new ASCIIChannel(iso8583Properties.getServerIp(), Integer.parseInt(iso8583Properties.getServerPort()), customPackager);// live
channel.setLogger(Logger.getLogger("Q2"),"connectips-channel");
...
}
Внутренне Logger.getLogger(String name)
создает новый регистратор, если ранее не было зарегистрированного регистратора с таким именем, и регистрирует его в NameRegistrar
Последовательные вызовы с тем же именем возвращают ранее созданный. Таким образом, вы создаете файлы только один раз.
Самым важным здесь является то, что initLogger
вызывается только в начале вашего приложения, например (это не лучший способ в качестве примера) в статическом инициализаторе вашего класса, если это единственное место, где вы используете jpos связанный класс:
public class Iso8583MessageBOKImpl implements Iso8583Message{
static {
initLogger();
}
...
Последнее, но не последнее. Я настоятельно рекомендую вам использовать Q2
для инициализации объектов jpos, В этом уроке есть все, что вам нужно для создания канала и регистратора.
Затем, когда вы хотите отправить сообщение, вам даже не нужно создавать экземпляр канала, просто вызовите методы QMUX.getMUX(mux-name)
и QMUX.request()
, чтобы отправить сообщение на канал и получить его ответ.