Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Logs Control v 1.1 - Контроль лог файлов

Статус пользователя default1k
сообщение 28.10.2014, 17:45
Сообщение #1
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

Описание:
Плагин удаляет старые лог файлы по прошествии n количества дней по дате. Каждый день в определённое время.

Квары

col_days - Количество дней после которого лог файлы будут удалятся (по умолчанию 5) max 27 дей
col_hour - Время удаления логов часы (по умолчанию 3)
col_minute - Время удаления логов минуты (по умолчанию 00)


Список изменений
1.0 Первый релиз
1.1 Немного упрощён код


Авторы: H.U.N.T.E.R.
Версия: 1.1

Исходник

Код:
#include <amxmodx>

#define PLUGIN "logs_control"
#define VERSION "1.1"
#define AUTHOR "H.U.N.T.E.R."

#define MONTH_WITH_31_DAYS (Month == 1 || Month == 3 || Month == 5 || Month == 7 || Month == 8 || Month == 10 || Month == 12)
#define MONTH_WITH_30_DAYS (Month == 4 || Month == 6 || Month == 9 || Month == 11)
#define MONTH_WITH_28_DAYS (Month == 2)


public plugin_init() {
register_plugin(PLUGIN, VERSION, AUTHOR)

register_cvar("col_days", "5")
register_cvar("col_hour", "3")
register_cvar("col_minute", "00")

if(get_cvar_num("col_days") > 27) set_cvar_num("col_days",27)

new hour,minute,secound
time(hour,minute,secound)

new RealTimeSec = (hour*60*60)+(minute*60)+ secound
new Fhour = get_cvar_num("col_hour")
new Fminute = get_cvar_num("col_minute")
new TimeToStartFunc = (Fhour*60*60)+(Fminute*60) - RealTimeSec

if(TimeToStartFunc > 0){

new Float:sec = float(TimeToStartFunc)
set_task(sec,"logs_delete",2143647)
}
}
public logs_delete(){
new sDay[33], sMonth[33]
new Day, Month
new iDay [32], iMonth [32]
new i_Day, Day_Month [32]

get_time( "%d", sDay, charsmax(sDay))
get_time( "%m", sMonth, charsmax(sMonth))

new num_days = get_cvar_num("col_days")

Day = str_to_num( sDay )
Month = str_to_num( sMonth )

new del_day = Day - num_days

if(Month>0 && Month<13 && del_day>0){
num_to_str(del_day,iDay,31)
}else{
Month = Month - 1
if(Month <= 0){
Month = 12
}
if(MONTH_WITH_31_DAYS){
i_Day = 31 + del_day
num_to_str(i_Day,iDay,31)
}
if(MONTH_WITH_30_DAYS){
i_Day = 30 + del_day
num_to_str(i_Day,iDay,31)
}
if(MONTH_WITH_28_DAYS){
i_Day = 28 + del_day
num_to_str(i_Day,iDay,31)
}
}
num_to_str(Month,iMonth,31)
if(Month <= 9){
format(iMonth, charsmax(iMonth), "0%s", iMonth)
}
if(i_Day <= 9){
format(iDay, charsmax(iDay), "0%s", iDay)
}

format(Day_Month, charsmax(Day_Month), "%s%s", iMonth, iDay)

new s_File[128]
new i_Dir = open_dir("addons\amxmodx\logs", s_File, charsmax(s_File))
if (i_Dir){
while (next_file(i_Dir, s_File, charsmax(s_File))){
if (s_File[0] == '.')
continue
if(containi(s_File, Day_Month) != -1){
new file[128]
new dirname[] = {"addons\amxmodx\logs"}
format(file,sizeof(file),"%s\%s",dirname,s_File)
delete_file(file)
log_amx("Файл: [%s] успешно удалён",file)
}
}
}
close_dir(i_Dir)

new s_File1[128]
new i_Dir1 = open_dir("logs", s_File1, charsmax(s_File1))
if (i_Dir1){
while (next_file(i_Dir1, s_File1, charsmax(s_File1))){
if (s_File1[0] == '.')
continue
if(containi(s_File1, Day_Month) != -1){
new file1[128]
new dirname1[] = {"logs"}
format(file1,sizeof(file1),"%s\%s",dirname1,s_File1)
delete_file(file1)
log_amx("Файл: [%s] успешно удалён",file1)
}
}
}
close_dir(i_Dir1)

return PLUGIN_CONTINUE
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 10 раз
   Цитировать сообщение
Статус пользователя miRror
сообщение 28.10.2014, 18:12
Сообщение #2


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат

Не буду даже смотреть, как он написан, но это плагин мечта. Идея классная =)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 28.10.2014, 18:15
Сообщение #3


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата(miRror @ 28.10.2014, 20:12) *
Не буду даже смотреть, как он написан, но это плагин мечта. Идея классная =)

у тебя же логи автоматически и так удаляются)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
XyLiGaN
сообщение 28.10.2014, 18:17
Сообщение #4
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

default1k,
А почему макс. кол-во дней = 27, а не 30, 60, 90 и т.д ?
А так не плохой плагин ;) И почему бы просто не сделать "перезаписывание" логов, как это сделано у античитов Маздана? т.е. устанавливаешь квар 40 дней, вот логи и буду храниться последние 40 дней = 40 лог-файлов. Было бы удобнее, да и удалять ничего ненужно)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя miRror
сообщение 28.10.2014, 18:17
Сообщение #5


Стаж: 15 лет

Сообщений: 1151
Благодарностей: 1002
Полезность: 967

Меценат Меценат



Я тебя в тот раз наверное не убедил, что не удаляются)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя default1k
сообщение 28.10.2014, 18:22
Сообщение #6
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

XyLiGaN, я сам только что этот плагин нашел. (в ручную забываю удалять) 27 это максимал, т.к дальше идут 3 типа месяцев по дням: 28, 30, 31. Толку делать перезапись логов, если файлов несколько создается.
P.S Может кто-то еще допилит, чтобы логи удалялись в папках: AD, FB, OD, SH и т.д

Отредактировал: default1k, - 28.10.2014, 18:26
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя BornToBeFree
сообщение 28.10.2014, 18:30
Сообщение #7


Стаж: 12 лет

Сообщений: 741
Благодарностей: 287
Полезность: 602

Меценат Меценат

Цитата(miRror @ 28.10.2014, 19:17) *
Я тебя в тот раз наверное не убедил, что не удаляются)
Скрытый текст

Из cstrike/logs не удаляются, а вот в addons/amxmodx/logs удаляются логи старше 10 дней


Скидка 5% при заказе сервера
Чтобы получить 5% скидку при заказе сервера на хостинге Serva4ok.ru
Необходимо ввести это кодовое слово gKUt-FENO-ZonE-aIaa
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Legenda
сообщение 28.10.2014, 18:32
Сообщение #8


Иконка группы

Стаж: 16 лет

Сообщений: 3619
Благодарностей: 1706
Полезность: 1010

Меценат Меценат

Цитата
Толку делать перезапись логов, если файлов несколько создается.

в core.ini можно настроить запись только в один файл)

ExTPuMaJI
Цитата
Из cstrike/logs не удаляются,

ЕМНИП должны удаляться, старше 30 суток.

автор плагина
Код
open_dir("addons\amxmodx\logs"

лучше так не делать, это не правильно, может быть мульти запуск серверов...

надо использовать функцию
get_localinfo("amxx_logs", ........ )
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
XyLiGaN
сообщение 28.10.2014, 18:33
Сообщение #9
Стаж: 13 лет
Город: Югорск

Сообщений: 11668
Благодарностей: 6450
Полезность: 1052

Меценат Меценат

default1k,
Цитата
AD, FB, OD, SH
Там ничего ненужно делать... Ты указываешь сколько хранить логи, 40 дней например и там будут логи, за последние 40 дней. Там идёт перезапись логов. такую же бы систему для стандартных логов)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
kritik
сообщение 28.10.2014, 19:37
Сообщение #10
Стаж: 12 лет

Сообщений: 511
Благодарностей: 708
Полезность: 0

Код так себе. Лучше это кроном делать раз в сутки.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 28.10.2014, 19:52
Сообщение #11


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

я кроном чищу у себя, на хостингах тоже есть такое вроде


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 28.10.2014, 19:57
Сообщение #12


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Вообще как-то сложно сделано, проще можно по идее, у меня была мысль сделать плагин чтобы можно было задавать какие логи чистить и в каком формате, а потом подумал что с cstrike/logs все не так круто и забил :)
Все остальные чистить не сложно, только метод надо чуть поменять мне кажется - от имени файла к дате


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя default1k
сообщение 28.10.2014, 20:41
Сообщение #13
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

mazdan, на Орфее сможешь реализовать или нет смысла?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 28.10.2014, 20:52
Сообщение #14


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

default1k, смысла нет на орфее =)
Если про серверные логи речь то там или смотреть надо логику формирования имени файла или читать содержимое оттуда
Код:
public clear_log()
{
new dirname1[128]
get_localinfo("amx_logdir", dirname1, charsmax(dirname1));
new s_File[16]
new i_Dir = open_dir(dirname1, s_File, charsmax(s_File))
new logdays = g_cv_logdays*60*60*24
if (i_Dir)
{
while (next_file(i_Dir, s_File, charsmax(s_File)))
{
if(parse_time (s_File, "L%Y%m%d.log")>0)
{
if(parse_time (s_File, "L%Y%m%d.log")< get_systime() - logdays)
{
static file[80]
formatex(file,79,"%s\%s",dirname1,s_File)
delete_file(file)
}
}
}
}
close_dir(i_Dir)
}

Код такой примерно не уверен насчет имени файла, сейчас накидал туда - тогда в днях сколько угодно можно задавать в кваре.
Как реализовано время чистки логов не смотрел, если честно, но сама чистка так вот компактнее. А запускать можно даже каждую смену карты (или проверять что к примеру время с часу до 5 утра)


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
Статус пользователя default1k
сообщение 28.10.2014, 21:05
Сообщение #15
Стаж: 12 лет

Сообщений: 718
Благодарностей: 180
Полезность: 153

mazdan, помню тема ыбла , где ты выложил на орффе план, где логи в БД записывались. Классно бы сделать так и + чтобы логи сразу в БД шли, а не в файл записывались. Жаль, что ты забил на это дело (
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ig0r0k
сообщение 28.10.2014, 21:11
Сообщение #16
Стаж: 12 лет

Сообщений: 18
Благодарностей: 5
Полезность: 0

Единственное что возмутило это: Код:
 new i_Dir = open_dir("addons\amxmodx\logs", s_File, charsmax(s_File))   


т.к. не всегда папка называется "amxmodx"

Может кто-то уже отписался по этому поводу, я не читал все сообщения.

Отредактировал: ig0r0k, - 28.10.2014, 21:11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя ig0r0k
сообщение 28.10.2014, 21:19
Сообщение #17
Стаж: 12 лет

Сообщений: 18
Благодарностей: 5
Полезность: 0

Мб у пользователя нет прав на редактирование/удаление файлов?

Причина: Не нужно цитировать большие посты целиком
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mazdan
сообщение 29.10.2014, 3:59
Сообщение #18


Иконка группы

Стаж: 15 лет

Сообщений: 7566
Благодарностей: 5437
Полезность: 1305

Цитата(default1k @ 28.10.2014, 23:05) *
mazdan, помню тема ыбла , где ты выложил на орффе план, где логи в БД записывались. Классно бы сделать так и + чтобы логи сразу в БД шли, а не в файл записывались. Жаль, что ты забил на это дело (

А, ну так там же было более верное решение через logaddress. Есть еще альтернатива - правим амхмодх (меняем названия нативов для записи в лог) и далее просто плагином создаем эти нативы. я себе так сделал, провда с целью оптимизации, а не переноса в бд.


Не пишите мне в ЛС. Пишите на почту. В ЛС я пропускаю сообщения.
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: