Burgershot
  • Home
  • Members
  • Team
  • Help
  • Search
  • Register
  • Login
  • Home
  • Members
  • Help
  • Search
Burgershot Other languages Spanish/Español Programación [Tutorial] Sistema simple de Log's

 
  • 0 Vote(s) - 0 Average
[Tutorial] Sistema simple de Log's
Screw
Offline

Burgershot Member
Posts: 17
Threads: 2
Joined: Apr 2019
Reputation: 0
Location: Venezuela
#1
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:

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!
Botato
Offline

Programador | Mapper
Posts: 66
Threads: 0
Joined: Apr 2019
Reputation: 1
Location: Argentina
#2
2019-04-21, 07:11 AM
Buena guía! Se agradece.
Zaiduni
Offline

Burgershot Member
Posts: 1
Threads: 0
Joined: Apr 2020
Reputation: 0
Location: Argentina
#3
2020-04-30, 12:02 AM
Lo has sacado de la Vieja ZenonCity hombre.
« Next Oldest | Next Newest »



  • View a Printable Version
  • Subscribe to this thread
Forum Jump:

© Burgershot - Powered by our Community and MyBB Original Theme by Emerald

Linear Mode
Threaded Mode