AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.01.2020, 12:50   #1  
oleggy is offline
oleggy
Участник
 
20 / 13 (1) ++
Регистрация: 03.12.2019
DAX2009: как реализовать сохранение лог сообщений
Привет.
Подскажите существует ли в аксапте какой либо класс для сохранения логов?
Или реализовывать сохранение сообщений надо вручную?

Имеется пакетник в котором хотелось бы сохранять результат выполнения цикла, т.е. для каждой итерации надо что бы добавлялось сообщение в файл.
Какой нибудь пример имеется?
Старый 28.01.2020, 12:56   #2  
Pandasama is offline
Pandasama
Участник
 
170 / 43 (2) +++
Регистрация: 11.08.2014
Адрес: Барнаул
В файл стандартного не встречал, но так как это задача в общем-то элементарная (открыл файл, добавил строку, закрыл файл) - то не сложно сделать самостоятельно.
Старый 28.01.2020, 13:11   #3  
oleggy is offline
oleggy
Участник
 
20 / 13 (1) ++
Регистрация: 03.12.2019
Методы для работы с файлами не подскажете? Какие они в ax?
Старый 28.01.2020, 13:13   #4  
Pandasama is offline
Pandasama
Участник
 
170 / 43 (2) +++
Регистрация: 11.08.2014
Адрес: Барнаул
например, класс TextIo
ну или .NET всякое, если в 2012-2009 дело происходит
https://docs.microsoft.com/en-us/dyn...e-textio-class
https://lmgtfy.com/?q=ax+2009+write+text+file
https://stackoverflow.com/questions/...ft-dynamics-ax
Старый 28.01.2020, 17:43   #5  
Pokersky09 is offline
Pokersky09
Участник
 
40 / 54 (2) ++++
Регистрация: 15.11.2012
Адрес: Москва
Имейте ввиду, что в пакетном задании весь код исполняется на сервере, к тому же в циле.
Соответственно путь к файлу должен быть доступен от АОС сервера, лучше всего сетевой путь. Если укажете C/:temp при запуске на клиенте в диалоге, то выгрузит он не на ваш терминальный сервер, а в такую же папку но на сервере AOS.

Есть также стандартная возможность увидеть сообщения из пакетной обработки - в журнале пакетных заданий, есть логи. Сохраняются все, но отобразится только первая 1000 (согласно настроек юзера).
Но есть и минусы такого подхода - если генерить большие сообщения, то в связи с тем что info пакуется в таблицу batch (или batchJob), вставка/обновление записей может происходить долго.
Старый 29.01.2020, 14:26   #6  
oleggy is offline
oleggy
Участник
 
20 / 13 (1) ++
Регистрация: 03.12.2019
Спасибо. Я вот сейчас думаю если пакетник будет выполняться на выделенном aos то по хорошему он должен сохранять лог по стандартному маршруту в папку аксапты. Вы не подскажете какой стандартный путь принят в AX когда она сама сохраняет свои логи. В соответствующей папке программы в programs files в папке аксапты? Или как?
Старый 29.01.2020, 20:23   #7  
Товарищ ♂uatr is offline
Товарищ ♂uatr
Участник
Аватар для Товарищ ♂uatr
MCBMSS
 
190 / 82 (3) ++++
Регистрация: 23.10.2012
Кто является потребителем данной информации?
Для каких целей это необходимо? Это отладка или статистика?
Возможно, лучше реализовать специальную таблицу и вставлять записи в неё?

Последний раз редактировалось Товарищ ♂uatr; 29.01.2020 в 20:41.
Старый 30.01.2020, 06:01   #8  
Pandasama is offline
Pandasama
Участник
 
170 / 43 (2) +++
Регистрация: 11.08.2014
Адрес: Барнаул
Если будете через таблицу реализовывать, учитывайте, что:
1) в файл запись быстрее
2) если транзакция крякнет, то таблица лога тоже не сохранится (если только специально не делать вставку в параллельной транзакции)
За это сообщение автора поблагодарили: vmoskalenko (4).
Старый 30.01.2020, 09:28   #9  
sukhanchik is offline
sukhanchik
Moderator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,753 / 2400 (86) +++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Pandasama Посмотреть сообщение
Если будете через таблицу реализовывать, учитывайте, что:
1) в файл запись быстрее
2) если транзакция крякнет, то таблица лога тоже не сохранится (если только специально не делать вставку в параллельной транзакции)
В файл запись не быстрее, а "как настроишь СУБД". Таблица - тот же файл, только управляется СУБД и способы быстрой записи в файл есть в средствах самой СУБД, в отличие неконфигурируемых классов типа TextIO и ему подобных. Поэтому тут лучше учитывать тот факт, что пишут для того, чтобы читать, а раз так - нужна быстрая запись с возможностью удобного чтения.
Логирование в транзакции противоречит самой идеи логирования, если это логирование предназначено для анализа самой транзакции. Поэтому логирование обычно делают в параллельной транзакции.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: mazzy (2), vmoskalenko (4).
Старый 30.01.2020, 10:03   #10  
Krasher is offline
Krasher
Участник
Аватар для Krasher
 
30 / 33 (2) +++
Регистрация: 14.05.2005
Цитата:
Сообщение от oleggy Посмотреть сообщение
Вы не подскажете какой стандартный путь принят в AX когда она сама сохраняет свои логи.
Меня не покидает ощущение, что стандартного info() для решения описанной задачи должно хватить. Куда уж стандартнее. Просмотр через журнал пакетных заданий по кнопке "Журнал". Вывод в infolog из транзакции можно вынести, если так ценно не терять выводимые данные. Пробовали? Не подходит? Только текстовый файл? Только хардкор?
Старый 01.02.2020, 08:01   #11  
oleggy is offline
oleggy
Участник
 
20 / 13 (1) ++
Регистрация: 03.12.2019
В продолжении темы.
Согласен info тоже удобен. Но в нем очень неудобно осуществлять навигацию, если записей очень много получается. Трудно даже ползунок сдвинуть.

Подскажите еще.

Вопрос 1
Пакетник ведет лог в файл, все хорошо. Но при работе есть случаи когда происходит вывод сообщений в инфолог из глубины различных методов.
Соответственно на финише получается такая картина, лог выводится в файл и выводится инфолог в котором масса сообщения тоже.
Невозможно понять в рамках какой строки лога выводились конкретное сообщения в инфоологе.

Мне было бы удобнее к каждой строке лога текстового файла добавлять текстовое значение из инфолога которое были выведены. Только вопрос: Как сообщение извлечь из инфолога в текстовую переменную? И главное что бы это сообщение из инфолога было без эффекта накопления..

Вопрос 2
Я использую класс для вывода сообщений System.IO.StreamWriter (код из примера):
X++:
static void Job_StreamWriter(Args _args)
{
    System.IO.StreamWriter sw;
    InteropPermission perm = new InteropPermission(InteropKind::ClrInterop);
    ;

    perm.assert();

    sw = new System.IO.StreamWriter(@"C:\test.txt");
    sw.WriteLine("Line 1");
    sw.WriteLine("Line 2");
    sw.Flush();
    sw.Close();
    sw.Dispose();

    CodeAccessPermission::revertAssert();
}
Пытался указать:
X++:
sw = new System.IO.StreamWriter(@"%USERPROFILE%\test.log");
Но система выводит ошибку "Объект "CLRObject" не может быть создан".
Похоже она не понимает переменные окружения.
Нужно для того что если пакетник выполняется вручную на сервере соответственно сохранить возможно лог только в папку текущего пользователя запустившего пакетник.

Вопрос 3
Возможно ли как то узнать какая ошибка генерируется в случае когда выводится ошибка "Объект "CLRObject" не может быть создан".
Это нужно для того что бы обрабатывать различные ошибки. Как в вопросе выше.
Если нет доступа к пути то нужно выводить такое сообщение.
Создавал вот такую конструкцию:
X++:
try
    {
        sw = new System.IO.StreamWriter(@"%USERPROFILE%\test.log");
        if (!sw)
        {
            throw error('ошибка');
        }
    }
    //catch(Exception::CLRError)
    catch(Exception::Error)
    {
        info("свой текст ошибки");
    }
Но ни в каком случае свой текст ошибки не выводится. Выводится только "Объект "CLRObject" не может быть создан".

Последний раз редактировалось oleggy; 01.02.2020 в 08:29.
Старый 01.02.2020, 16:26   #12  
Pandasama is offline
Pandasama
Участник
 
170 / 43 (2) +++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Только вопрос: Как сообщение извлечь из инфолога в текстовую переменную?
что-нибудь в таком духе
http://www.ksaelen.be/wordpresses/dy...m-the-infolog/

Цитата:
Вопрос 3
Возможно ли как то узнать какая ошибка генерируется в случае когда выводится ошибка "Объект "CLRObject" не может быть создан".
Не уверен, возможно поможет вот это:
https://docs.microsoft.com/en-us/dyn...om-clr-objects
Старый 03.02.2020, 11:10   #13  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,730 / 845 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Более читаемый текст ошибки CLRError
X++:
    try
    {
        // какой-то код с CLR
    }
    catch(Exception::CLRError)
    {
        error(AifUtil::getClrErrorMessage());
    }
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX2009: как в Job реализовать прогресс бар? oleggy DAX: Программирование 5 14.02.2020 05:04
Полноценное восстановление записей, используя лог Pustik DAX: Программирование 2 20.07.2012 20:31
Реализация службы информ. сообщений. А у Вас есть? ski DAX: Функционал 4 12.06.2011 23:02
DAX2009 не дружит с VS2010 oleg_e DAX: Администрирование 2 17.06.2010 10:34
Вопросы по OLAP в DAX2009 oleg_e DAX: Функционал 9 10.12.2008 02:02
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:59.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.