Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> log4j логирование, в разные файлы 
:(
    Опции темы
Samotnik
Дата 19.1.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



сабж
Есть приложение  TCP/IP 
нужно сделать элементарную вещь  smile 
каждый новый клиент, который коннектицца к серверу должен писаться в отдельный файл. 
Т.Е.  законнектился первый - для него создался файл и туда пишется все то, что присылает этот клиент. И так для каждого.
Код

ServerSocket ss;
ss = new ServerSocket(9876);
            System.out.println("Server started!");
            Socket socket;
            while (true) {
                socket = ss.accept();
                Thread t = new Thread(new MyThread(socket));
                t.start();
                System.out.println("New connection!");
            }

Вот этот вывод нужно писать с помощью логов в отдельные файлы
Соббсно сам вопрос
Как сконфигурять log4j.xml ?   smile

Добавлено через 10 минут
на данный момент у меня такая вот конфигурация 
Код

<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>

    <appender name="LOG-FILE-APPENDER" class="org.apache.log4j.FileAppender">
        <param name="file" value="app.log"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} [%5p] %c %m at %l%n"/>
        </layout>
    </appender>

    <root>
        <priority value="DEBUG"/>
        <appender-ref ref="LOG-FILE-APPENDER"/>
    </root>

</log4j:configuration>

PM MAIL   Вверх
COVD
Дата 20.1.2009, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Т.Е.  законнектился первый - для него создался файл 

Т.Е.  законнектился первый - для него создался .. логгер. 

Однако сразу после accept имя пользователя как правило неизвестно. Поэтому мы всех пишем в единый лог. И сохраняем там ip. После того, как имя стало известно, то и имя добавляем в соответствующую позицию. А анализируем логи с помошью программ baretail - нужного пользователя можно выделить с помощью фильтров. И в то же время можно видеть общую картину.

ЗЫ Ну, не принижайте без нужды наше ремесло - "элементарная задача" smile .

Это сообщение отредактировал(а) COVD - 20.1.2009, 01:14
PM MAIL   Вверх
ivg
Дата 20.1.2009, 01:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Цитата(COVD @  20.1.2009,  03:12 Найти цитируемый пост)
И сохраняем там ip. После того, как имя стало известно, то и имя добавляем в соответствующую позицию.

Примерчик элементарной реализации этого можно? smile Я к тому, что для тех, кто слабо знаком с log4j, не так уж это и элементарно.
PM MAIL   Вверх
Samotnik
Дата 20.1.2009, 01:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



не  я не про то  smile 
Я отлавливаю каждое новое соединение (пример кода я выложил)
При каждом новом соединении у меня пишется  System.out.println("New connection!");
так вот я спрашиваю
как сделать эту же запись тока в разные файлы ???
т.е. сейчас у меня все пишется в один файл (file.log) типа 
Цитата

клиент 1 соед
клиент 2 соед
клиент 3 соед 
и т.д.

а мне нужно чтобы эти соединения писались в разные файлы, т.е. к примеру 
file1.log
клиент 1 соед

file2.log
клиент  2 соед

file3.log 
клиент 3 соед
PM MAIL   Вверх
ivg
Дата 20.1.2009, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Samotnik, я тебя понял, что ты хочешь. Но на каждый сеанс по файлу - по мне, плохая идея. По пользователю - нормально, но сначала аутентификация, а до этого логи куда девать? Того, что ты хочешь - самый нормальный вариант - по IP. Но в текущей реализации log4j конфигурированием этого, по моему, не сделать. Только если написать свой Appender. Но, как уже сказал COVD, с использованием программ для анализа логов, такая необходимость отпадает.
PM MAIL   Вверх
Samotnik
Дата 20.1.2009, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(ivg @  20.1.2009,  01:14 Найти цитируемый пост)
Но на каждый сеанс по файлу - по мне, плохая идея

возможно
но нужно сделать именно так ! 
неужто нету способов писать все не в один файл в одном аппендере, а в много файлов ?  К новому файлу добавлять цифирку ?

Добавлено через 1 минуту и 15 секунд
Цитата(ivg @  20.1.2009,  01:14 Найти цитируемый пост)
ого, что ты хочешь - самый нормальный вариант - по IP

окей
и как это сделать по ип ?
Цитата(ivg @  20.1.2009,  01:14 Найти цитируемый пост)
Только если написать свой Appender.

как это сделать ?
без сторонних тулзов 
PM MAIL   Вверх
vdweller
Дата 20.1.2009, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 1.2.2008

Репутация: нет
Всего: нет



Статическим конфигом так не сделать скорее всего, тебе придется в рантайме после создания логгера задавать ему имя файла
PM MAIL   Вверх
LSD
Дата 20.1.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Samotnik @  20.1.2009,  02:46 Найти цитируемый пост)
неужто нету способов писать все не в один файл в одном аппендере, а в много файлов ?

Стандартные аппендеры такого не позволяют.

Если бы меня уж так прижало реализовывать такую лабуду, я бы написал бы свой аппендер + NDC. Или динамическое создание категорий и конфигурирование аппендеров из кода.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 20.1.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



Цитата(LSD @  20.1.2009,  11:43 Найти цитируемый пост)
Если бы меня уж так прижало реализовывать такую лабуду

почему лабуду ?
вот допустим есть чат  который работает по  tcp/ip  все клиенты проходят через сервер
и вот серверу нужно для каждого клиента создавать свой логгер и вести записи для каждого клиента, как в аське - история общения сохраняется для КАЖДОГО юзера с которым ты говорил, а не  все разговоры в одном файле
Вот и мне нужно сделать то же самое, никакой лабуды тут не вижу, очень полезная штука! Хранить разговоры каждого клиента в отдельном файле  smile

Добавлено через 47 секунд
вобщем ясно, никто ничего не подскажет  smile 
PM MAIL   Вверх
dima32
Дата 20.1.2009, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.10.2008

Репутация: 1
Всего: 1



Если тебе непонятно как сделать свой аппендер - вот тут прмер:
http://www.log4j.ru/articles/NewAppender.html

Добавлено @ 14:30
ну и как сказал LSD и наверно использование org.apache.log4j.NDC удобно  для хранения какой-то id клиента (хотя   пойдёт даже Статическая ThreadLocal переменная )

Это сообщение отредактировал(а) dima32 - 20.1.2009, 14:31
PM MAIL   Вверх
LSD
Дата 21.1.2009, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(Samotnik @  20.1.2009,  14:03 Найти цитируемый пост)
почему лабуду ?
вот допустим есть чат  который работает по  tcp/ip  все клиенты проходят через сервер
и вот серверу нужно для каждого клиента создавать свой логгер и вести записи для каждого клиента, как в аське - история общения сохраняется для КАЖДОГО юзера с которым ты говорил, а не  все разговоры в одном файле
Вот и мне нужно сделать то же самое, никакой лабуды тут не вижу, очень полезная штука! Хранить разговоры каждого клиента в отдельном файле

ICQ совсем другое дело.
1. Это не логи, а история сообщений.
2. Количество контактов в ICQ фиксировано, в отличие от количества IP адресов.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Samotnik
Дата 21.1.2009, 03:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Super star !
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 7192
Регистрация: 4.11.2006
Где: Минск City

Репутация: 8
Всего: 191



dima32, спасибо, только я  не понимаю, а что делать со своим аппендером ? 
Каким образом его применить в нужных мне целях ? 
 smile  smile  smile  smile 
За ссылку спасибо  smile  smile 
PM MAIL   Вверх
ivg
Дата 21.1.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 33
Всего: 81



Samotnik, сохранение истории сообщений в чате - это функционал самого приложения, а не библиотек типа log4j. То есть с помощью log4j так или иначе можно получить то что ты хочешь. Только вот вопрос а надо ли? Я предлагаю отказаться от идеи - хранить это дело в файлах. Сообщения каждого пользователя имеют смысл вместе с сообщениями других участников, так ведь? Если в общем чате несколько десятков человек, в файл каждого из них ты будешь сохранять одну и туже информацию(сообщения всех участников)? Или только одного человека? А как потом собирать всё это в диалог? Нам ведь нужны простые решения так ведь? Если пользователь захочет посмотреть историю весь файл будешь пересылать? Или в твоём случае эти логи нужны только "большому брату"? smile
Короче, если делать как в ICQ, предоставлять пользователю выборку истории за определённый период времени, фильтры на пользователей и т. п. однозначно ИМХО, лучшим местом хранения сообщений будет база данных.
PM MAIL   Вверх
dima32
Дата 23.1.2009, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.10.2008

Репутация: 1
Всего: 1



Примерно так. Как уже было сказано - log4j не обязательно
Код

public class MyThread extends Thread{
    private static ThreadLocal<String> clientIp;
    Socket socket;
    public MyThread(Socket socket) {
        this.socket=socket;
    }

    @Override
    public void run() {
        clientIp.set(socket.getRemoteSocketAddress().toString());
        try{
          //do here   what you want
         // log.info(" my message")
       
        }finally {
            clientIp.set(null);
        }        
    }    
}



Код


    public class MyAppender extends AppenderSkeleton{
        @Override
        protected void append(LoggingEvent event) {
            String fileName=MyThread.clientIp.get();
            String message=event.getMessage();
            // write message  file             
        }

      //implement other methods
    }



ну и конфиг будет примерно такой
Код


<?xml version='1.0' encoding='ISO-8859-1' ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <appender name="LOG-FILE-APPENDER" class="MyAppender"/>
    <root>
        <priority value="DEBUG"/>
        <appender-ref ref="LOG-FILE-APPENDER"/>
    </root>
</log4j:configuration>


Это сообщение отредактировал(а) dima32 - 23.1.2009, 11:06
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1512 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.