Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (1): [1]   

> Описание: Отслеживание log файла на сайте.
Martin
Отправлено: 24 Июля, 2022 - 23:48:50
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022  
Репутация: 1




У меня есть сайт, и если на нем появляются ошибки они добавляются в текстовый блокнот.
log.txt. Как сделать проверку на появление в нем новых данных и сравнить со списком критических ошибок.

Как открыть файл я разобрался но проблема ещё в том, что его вес может достигать больше 200мб и открывать блокнот занимает много времени у моей системы. Мне нужно именно новые данные в блокноте, возможно считывать последние строки не открывая сам файл?
 
 Top
Zireael
Отправлено: 25 Июля, 2022 - 00:39:31
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
возможно считывать последние строки не открывая сам файл?

Нет.
 Цитата:
Как отследить появление новой информации в текстовом документе?

Можно проверять размер файла, если изменился значит добавились данные.
Пример, как узнать размер файла:
CODE:
#define FILE_ATTRIBUTE_NORMAL 0x80
#define OPEN_EXISTING 3
#define INVALID_HANDLE_VALUE -1
external(INT, "CreateFile", "CreateFileA", "Kernel32.dll");
external(INT, "GetFileSize", "GetFileSize", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");


string Path = "C:\log.txt"; // путь к файлу
int hfile=CreateFile(Path, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hfile != INVALID_HANDLE_VALUE)
{
int file_size=GetFileSize(hfile, 0); // получить размер файла
CloseHandle(hfile);

messagebox(file_size);
}
else messagebox("Файл не открылся");



Если не принципиально, то для данной задачи лучше использовать PowerShell.
Открыть PowerShell IDE и запустить скрипт:
CODE:
cls
Get-Content 'C:\log.txt' -Wait -Tail 0

Как только в файле появятся новые строки, то они будут выведены в консоль. Можно проверить всё что нужно.
 
 Top
Martin
Отправлено: 25 Июля, 2022 - 01:05:43
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022  
Репутация: 1




 Zireael пишет:
Если не принципиально, то для данной задачи лучше использовать PowerShell.
Открыть PowerShell IDE и запустить скрипт:
считывает крякозябры, не выводит русский текст. Да как мне его сравнить?

 Zireael пишет:
Можно проверять размер файла, если изменился значит добавились данные.

А можно по дате и времени отслеживать? Например проверяет число сегодня, время, находит его в файле и начинает следить?
Или как вы сказали узнав, что размер файла изменился, сразу спуститься на последнюю строку и прочитать её? Но придется всё равно весь файл прочитать?
(Добавление)
Возможно, тогда при первом запуске, прочитать весь файл, узнать сколько там строк,
потом следить за изменением размера файла, и как только он изменился, прочитать данные ниже последней строки, что мы узнали?
 
 Top
Zireael
Отправлено: 25 Июля, 2022 - 01:16:19
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




 Цитата:
считывает крякозябры, не выводит русский текст.

Нужно кодировку файла указать:
CODE:
Get-Content 'C:\image\log.txt' -Wait -Tail 0 -Encoding UTF8

 Цитата:
Да как мне его сравнить?

С чём нужно сравнить?


Функциями, которые в кибор только весь файл читать.
 
 Top
Martin
Отправлено: 25 Июля, 2022 - 01:39:02
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022  
Репутация: 1




 Zireael пишет:
С чём нужно сравнить?

С текстом. К примеру пишет "Критическая ошибка 321" то выполнить действие 1 , а если "Ошибка 502" то выполнить действе 2 и т.д.
(Добавление)
 Zireael пишет:
Нужно кодировку файла указать:
Спасибо, теперь всё отображает.

 Zireael пишет:
Функциями, которые в кибор только весь файл читать.
Получается нужно искать эти функции в питоне и интегрировать код в кибор?
 
 Top
Zireael
Отправлено: 25 Июля, 2022 - 02:10:36
Post Id



Пользователь
Эксперт


Покинул форум
Сообщений всего: 4401
Дата рег-ции: Нояб. 2017  
Репутация: 580




CODE:
#define SEEK_SET 0
#define FILE_ATTRIBUTE_NORMAL 0x80
#define OPEN_EXISTING 3
#define INVALID_HANDLE_VALUE -1
external(INT, "CreateFile", "CreateFileA", "Kernel32.dll");
external(INT, "GetFileSize", "GetFileSize", "Kernel32.dll");
external(INT, "CloseHandle", "CloseHandle", "Kernel32.dll");
external(INT, "_fseek", "fseek", "msvcrt.dll");
external(INT, "_fopen", "fopen", "msvcrt.dll");
external(INT, "_fclose", "fclose", "msvcrt.dll");
external(INT, "_fread", "fread", "msvcrt.dll");

string Path = "C:\image\log.txt"; // путь к файлу


string NewStr;

loop()
{
string result = Wait(Path, 500); // ждать добавления строк в файл, каждые 500 мсек проверяется размер файла
string text = utf8toansi(result);

messagebox("Новый текст:^r^n^r^n"+text); // добавленный текст

if(regexsearch(1, #NewStr, text, "Критическая ошибка 321"))
{
messagebox("Действие 1");
}
if(regexsearch(1, #NewStr, text, "Ошибка 502"))
{
messagebox("Действие 2");
}
}

error:;


function Wait(string PathToFile, int TimeOut)
{
char c_text[99999];
int FileSize = _GetFileSize(Path);
int FileSizeNew;
loop()
{
FileSizeNew = _GetFileSize(PathToFile);
if(FileSizeNew > FileSize)break;
pause(TimeOut);
}

int file = _fopen(Path, "rb");
if(file != 0)
{
_fseek(file, FileSize, SEEK_SET);
int k = _fread(address(#c_text[0]), 1, FileSizeNew-FileSize, file);
_fclose(file);
}
else
{
messagebox("Файл не открылся");
goto global error;
}
return format(#c_text[0], k);
}


function _GetFileSize(string PathToFile)
{
int file_size = 0;
int hfile=CreateFile(PathToFile, 0, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if(hfile != INVALID_HANDLE_VALUE)
{
file_size=GetFileSize(hfile, 0);
CloseHandle(hfile);
}
else
{
messagebox("Файл не открылся");
goto global error;
}
return file_size;
}
 
 Top
Martin
Отправлено: 25 Июля, 2022 - 02:23:29
Post Id



Пользователь
Мастер


Покинул форум
Сообщений всего: 121
Дата рег-ции: Июнь 2022  
Репутация: 1




Zireael , Сколько я вам должен? Спасибо, всё идеально работает.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by