powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с log4j
18 сообщений из 18, страница 1 из 1
Проблема с log4j
    #37694057
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день!

Я в java человек новый. Столкнулся с проблемой записи в лог из нескольких потоков.
используется log4j.properties:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
# Root logger option
log4j.rootLogger=INFO, stdfile, stdout

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Direct log messages to stdfile
log4j.appender.stdfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdfile.file=mf.log
log4j.appender.stdfile.append=true
log4j.appender.stdfile.datePattern='.'yyyy-MM-dd'.log'
log4j.appender.stdfile.layout=org.apache.log4j.EnhancedPatternLayout
log4j.appender.stdfile.layout.conversionPattern=%d{yyyy-MM-dd hh:mm:ss} %5p %c{1}:%L - %m%n

log4j.logger.messapp=INFO
#log4j.loggermessapp.MsproView=INFO



В лог не попадают данные из одного потока.
Помогите кто чем может.
Заранее благодарен.
...
Рейтинг: 0 / 0
Проблема с log4j
    #37694699
crazy_hands
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Леонов Юрий, нужна часть кода, которая не пашет.
...
Рейтинг: 0 / 0
Проблема с log4j
    #37694860
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crazy_hands,

значит так, прога стартует, читает настройки и запускает потоки процедурой process
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
   private void process() throws Exception {
        this.inboundPollingThread = new InboundPollingThread();
        this.inboundPollingThread.setName("SMSServer - InboundPollingThread");
        this.inboundPollingThread.start();
        this.outboundPollingThread = new OutboundPollingThread();
        this.outboundPollingThread.setName("SMSServer - OutboundPollingThread");
        this.outboundPollingThread.start();
        while (!this.shutdown) {
            Thread.sleep(1000);
        }
    }



при старте потока inboundPollingThread в цикле пока не закроется прога через определенный интервал вызывается процедура readMessages()
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
   void readMessages() {
        List<InboundMessage> msgList = new ArrayList<InboundMessage>();
        try {
            Service.getInstance().readMessages(msgList, MessageClasses.ALL);
            if (msgList.size() > 0) 
            {
                Logger.getInstance().logInfo("SMSServer: receiving... [" + msgList.size() + "]", null, null);
                for (Interface<? extends Object> inf : getInfList()) {
                    if (inf.isInbound()) {
                        inf.messagesReceived(msgList);
                    }
                }
                if (getProperties().getProperty("settings.delete_after_processing", "no").equalsIgnoreCase("yes")) {
                    for (InboundMessage msg : msgList) {
                        Service.getInstance().deleteMessage(msg);
                    }
                }
            }
        } catch (Exception e) {
            Logger.getInstance().logError("SMSServer: reading messages exception!", e, null);
        }
    }



аналогично второй процесс outboundPollingThread , только там вызывается sendMessages()
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
    void sendMessages() {
        boolean foundOutboundGateway = false;
        for (org.smslib.AGateway gtw : Service.getInstance().getGateways()) {
            if (gtw.isOutbound()) {
                foundOutboundGateway = true;
                break;
            }
        }
        if (foundOutboundGateway) {
            List<OutboundMessage> msgList = new ArrayList<OutboundMessage>();
            try {
                for (Interface<? extends Object> inf : getInfList()) {
                    if (inf.isOutbound()) {
                        msgList.addAll(inf.getMessagesToSend());
                    }
                }
            } catch (Exception e) {
                Logger.getInstance().logError("SMSServer: sending messages exception!", e, null);
            }
            if (getProperties().getProperty("settings.send_mode", "sync").equalsIgnoreCase(("sync"))) {
                Logger.getInstance().logInfo("SMSServer: sending synchronously...", null, null);
                for (OutboundMessage msg : msgList) {
                    try {
                        Service.getInstance().sendMessage(msg);
                        for (Interface<? extends Object> inf : getInfList()) {
                            if (inf.isOutbound()) {
                                inf.markMessage(msg);
                            }
                        }
                    } catch (Exception e) {
                        Logger.getInstance().logError("SMSServer: sending messages exception!", e, null);
                        try {
                            for (Interface<? extends Object> inf : getInfList()) {
                                if (inf.isOutbound()) {
                                    inf.markMessage(msg);
                                }
                            }
                        } catch (Exception e1) {
                            Logger.getInstance().logError("SMSServer: sending messages exception!", e1, null);
                        }
                    }
                }
            } else {
                Logger.getInstance().logInfo("SMSServer: sending asynchronously... [" + msgList.size() + "]", null, null);
                for (OutboundMessage msg : msgList) {
                    if (!Service.getInstance().queueMessage(msg)) {
                        try {
                            for (Interface<? extends Object> inf : getInfList()) {
                                if (inf.isOutbound()) {
                                    inf.markMessage(msg);
                                }
                            }
                        } catch (Exception e) {
                            Logger.getInstance().logError("SMSServer: sending messages exception!", e, null);
                        }
                    }
                }
            }
        }
    }


суть в том что в лог попадает в основном
Код: java
1.
Logger.getInstance().logInfo("SMSServer: sending asynchronously... [" + msgList.size() + "]", null, null);



а запись
Код: java
1.
Logger.getInstance().logInfo("SMSServer: receiving... [" + msgList.size() + "]", null, null);


выпадает крайне редко даже при наличии входящих сообщений
надеюсь что этих данных хватит
...
Рейтинг: 0 / 0
Проблема с log4j
    #37694910
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрийвыпадает крайне редко даже при наличии входящих сообщений
надеюсь что этих данных хватит

Поставьте Logger.getInstance().logInfo("SMSServer: receiving... [" + msgList.size() + "]", null, null); перед if (msgList.size() > 0) тогда они будут в равных условия с "...sending asynchr.." и будет вывод даже при отсутствии входящих сообщений . :)
...
Рейтинг: 0 / 0
Проблема с log4j
    #37694929
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD,
а вот это не предусмотрено техзаданием ))
я уже думал так сделать
у меня вопрос такой - а могут ли писать в один файл одновременно два потока?
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695007
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще где можно посмотреть сам код процедуры log класса log4j?
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695015
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов Юрийу меня вопрос такой - а могут ли писать в один файл одновременно два потока?
Log4j складывает сообщения в очередь и в файл они пишутся только одним потоком сразу пачками.
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695021
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Logger.getInstance().logError()
А что за версия Log4j? Я там таких методов вообще не наблюдаю.
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695104
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
а внутри?
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695121
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийBlazkowicz,
а внутри?
А по-русски?
Logger.getLogger("My Application Log").error() - это пример логирования Log4j.
Методы getInstance() - deprecated. Да и метода без параметров такого я не вижу.
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695139
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
Код: java
1.
2.
3.
4.
5.
public void logInfo(String message, Exception e, String gatewayId)
	{
		if (log4jLogger == null) return;
		log4jLogger.log(FQCN, Level.INFO, formatMessage(message, gatewayId), e);
	}


это что?
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695154
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
BlazkowiczLog4j складывает сообщения в очередь и в файл они пишутся только одним потоком сразу пачками.

а можно поподробнее?
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695166
0FD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЛеонов ЮрийBlazkowicz,
а внутри?
А по-русски?
Logger.getLogger("My Application Log").error() - это пример логирования Log4j.
Методы getInstance() - deprecated. Да и метода без параметров такого я не вижу.

Кажется это вот что:
http://smslib.googlecode.com/svn-history/r2281/smslib/trunk/src/java/org/smslib/helper/Logger.java
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695169
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийBlazkowicz,
Код: java
1.
2.
3.
4.
5.
public void logInfo(String message, Exception e, String gatewayId)
	{
		if (log4jLogger == null) return;
		log4jLogger.log(FQCN, Level.INFO, formatMessage(message, gatewayId), e);
	}


это что?
Я по чем знаю. Какой-то метод. У нас тут сеанс телепатичнсой связи? Угадайте что за код внутри?
formatMessage что-то использует?
if (log4jLogger == null) return; вас не смущает? Может он там постоянно null?
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695174
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD,
это оно и есть ))
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695179
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Леонов ЮрийBlazkowicz,
BlazkowiczLog4j складывает сообщения в очередь и в файл они пишутся только одним потоком сразу пачками.

а можно поподробнее?
http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/AsyncAppender.html
...
Рейтинг: 0 / 0
Проблема с log4j
    #37695183
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,
выше ссылка есть, именно этот класс и используется
...
Рейтинг: 0 / 0
Проблема с log4j
    #37701464
Леонов Юрий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0FD,

а вы работали с этими классами?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Проблема с log4j
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]