2019-04-21, 05:11 AM
Buenas comunidad de Burgershot, hoy les vengo a compartir un sistema de log's simple pero efectivo que casi siempre utilizo en la creación de algún gamemode y así tener mejor controlado lo que sucede dentro del servidor cuando no me encuentro en él. Todo lo explicaré paso por paso en el código, creo que es la forma más efectiva de entenderlo, así que empecemos:
Y con eso, para guardar un evento en nuestro servidor simplemente tendríamos que invocar a la función de esta manera:
Lo cual generaría un archivo de texto llamado "login.txt" que tendría una línea similar a esta:
También se puede utilizar para guardar eventos de comandos importantes y delicados en los servidores, por ejemplo, si un administrador en un servidor roleplay da dinero, si un usuario es kickeado, baneado, etc. siempre son informes clave a la hora de tomar decisiones.
Como especifiqué en el título, es un sistema simple pero efectivo, funciona y espero que le sea de ayuda o aprendizaje para alguien.
Un saludo!
PHP Code:
stock Log(const nombre[], const texto[]){ // Primero definimos la función que utilizaremos para guardar los Logs, en este caso "Log(nombre[], texto[])"
/* Los parámetros son muy sencillos, "nombre" es el nombre del archivo en el que guardaremos los logs,
se puede utilizar también para separar cada archivo y así poder tener varios archivos con distintos tipos de
logs, como login, registro, uso de comandos administrativos, kicks, bans, etc. y "texto" es lo que guardaremos
en el archivo, es decir, el suceso. */
new dir[32], File:arc, txt[256]; // dir es el directorio donde guardaremos nuestros logs, arc nuestra variable de archivo y txt[] un string que necesitaremos para dar formato
new log_D, log_M, log_A; // Las variables log guardarán la fecha y hora de los sucesos. Cada inicial representa su contenido, D(ia) - M(es) - A(ño)
new log_Seg, log_Min, log_Hor; // Misma explicación que antes pero ahora con hora, minutos y segundos
getdate(log_A, log_M, log_D); // Con esta función obtenemos la fecha actual y la almacenamos en sus respectivas variables declaradas anteriormente
gettime(log_Hor, log_Min, log_Seg); // Misma explicación que antes pero ahora obteniendo la hora actual
format(dir, sizeof(dir), "/Logs/%s.log", nombre); // Acá especificamos dónde guardaremos los logs, en este caso, en /scriptfiles/Logs/. como dije anteriormente, la constante nombre tendrá el nombre del archivo
format(txt, sizeof(txt), "[%02d/%02d/%d|%02d:%02d:%02d] %s\r\n", log_D, log_M, log_A,
log_Hor, log_Min, log_Seg, texto); // acá procedemos a dar formato:
/* txt es la variable donde se guardará la línea que se escribirá en el archivo del log, yo la puse con el siguiente formato:
"[DD/MM/AAA|HH:MM:SS] Texto a guardar en el archivo" - el "%02d" es utilizado para 'rellenar' por así decirlo el número
entero que sería conformado por un solo dígito, haciendo que sean dos, por ejemplo: en vez de que la fecha quede de
esta manera: "3/4/2019" quedaría así "03/04/2019", dando un mejor aspecto al lector. "%s" es la constante texto, la línea
que se guardará en nuestro archivo */
if(!fexist(dir)) // Si el archivo no existe en el directorio entonces...
arc = fopen(dir, io_write); // se genera un nuevo archivo utilizando io_write con el nombre especificado en los parámetros
else // pero si ya existe...
arc = fopen(dir, io_append); // se abre el archivo y simplemente añadiremos una nueva línea a ese archivo utilizando io_append
printf("» [LOG : %s] %s", nombre, texto); // Aquí simplemente mostramos el log por consola también...
fwrite(arc, txt); // Escribimos en nuestro archivo la variable texto a la cual le dimos formato anteriormente
fclose(arc); // Acá se cierra el archivo, muy importante que cada vez que se abre un archivo sea para lectura y/o escritura este sea cerrado
return 1;
}
Y con eso, para guardar un evento en nuestro servidor simplemente tendríamos que invocar a la función de esta manera:
PHP Code:
new string[128], nombre[MAX_PLAYER_NAME];
GetPlayerName(playerid, nombre, sizeof(nombre));
format(string, sizeof(string), "%s ha entrado en el servidor", nombre);
Log("login", string);
Lo cual generaría un archivo de texto llamado "login.txt" que tendría una línea similar a esta:
PHP Code:
[21/04/2019|01:08:50] Screw ha entrado en el servidor
También se puede utilizar para guardar eventos de comandos importantes y delicados en los servidores, por ejemplo, si un administrador en un servidor roleplay da dinero, si un usuario es kickeado, baneado, etc. siempre son informes clave a la hora de tomar decisiones.
Como especifiqué en el título, es un sistema simple pero efectivo, funciona y espero que le sea de ayuda o aprendizaje para alguien.
Un saludo!