Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

adriano.nogueira

Log para gravar alterações

Recommended Posts

Bom dia.

    Sou novato aqui no fórum e gostaria de um auxílio na questão de backup.

    Já fiz várias pesquisas sobre o assunto e acho que não existe uma solução que eu acho que tinha que ter..

    Seguinte, preciso gravar log de alterações de tabelas, só que não queria fazer campo a campo..

    Gostaria de usar algo do tipo.

    SELECT column_name into campo
      FROM INFORMATION_SCHEMA.COLUMNS
    WHERE table_name = 'tbl_name'

   

     aí eu faria a comparação dinâmica

     if NEW.campo <> old.campo then

           insert log

           ou

           concatena set c_log = campo=>valor;

           e no final gravo uma string só no log

     end if;

 

     e com isso não corro o risto de incluir algum campo na tabela e não incluir no log

     seria uma solução mais inteligente do que comparar campo a campo.

 

Obrigado a todos.

At.

Adriano

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não temnho certeza se vai funcionar mas no select invez de colocar o nome dos campos coloca *

 

exemplo

SELECT * FROM SUATABELA
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que eu saiba MySql tem um audit log padrão , por que não o usa ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por fernandomullerjr
      Oi Pessoal,
      bom dia.
      Estou tentando obter os logs do Laravel através do stdout do meu Container PHP, mas quando eu simulo um erro dentro do Container via php artisan ele não é mostrado no stdout do container:
      ``` 
      fernando@c64d676157c2:/var/www$ php artisan command5
      Command "command5" is not defined.  
      fernando@c64d676157c2:/var/www$ 
      ```
      O erro é escrito no log do Laravel:
      ``` 
      fernando@c64d676157c2:/var/www$ tail storage/logs/laravel.log
      "} 
      [2022-02-22 12:43:52] dev.ERROR: Command "command5" is not defined. {"exception":"[object] (Symfony\\Component\\Console\\Exception\\CommandNotFoundException(code: 0): Command \"command5\" is not defined. at /var/www/vendor/symfony/console/Application.php:644)
      [stacktrace]
      #0 /var/www/vendor/symfony/console/Application.php(228): Symfony\\Component\\Console\\Application->find('command5')
      #1 /var/www/vendor/symfony/console/Application.php(140): Symfony\\Component\\Console\\Application->doRun(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #2 /var/www/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\\Component\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #3 /var/www/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(129): Illuminate\\Console\\Application->run(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #4 /var/www/artisan(37): Illuminate\\Foundation\\Console\\Kernel->handle(Object(Symfony\\Component\\Console\\Input\\ArgvInput), Object(Symfony\\Component\\Console\\Output\\ConsoleOutput))
      #5 {main}
      "} 
      fernando@c64d676157c2:/var/www$ 
      ```

      Mas o erro não é mostrado no stdout do Container PHP:
      ``` 
      fernando@notebookdell-1487   /lab/treinamento/travellist-laravel-demo     main   docker logs -f travellist-app                                                               SIGINT(2) ↵  10345  09:44:30  
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'user' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: [pool www] 'group' directive is ignored when FPM is not running as root
      [22-Feb-2022 12:40:57] NOTICE: fpm is running, pid 1
      [22-Feb-2022 12:40:57] NOTICE: ready to handle connections
      ```
      Eu tentei diversas combinações de configurações do php.ini file, config/logging.php, LOG_CHANNEL  do ".env",  diversas opções de configuração do stack e muito mais.
      Eu estou usando o PHP na versão 7.4.28.
      laravel/framework v7.11.0
      Composer version 2.2.6
      **O projeto foi clonado do Github:**
      https://github.com/do-community/travellist-laravel-demo

      Todos os containers estão up e rodando conforme o esperado:
      ```
      fernando@notebookdell-1487   /lab/treinamento/travellist-laravel-demo     main   docker container ls                                                                                     10344  09:40:58  
      CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS                                   NAMES
      c64d676157c2   travellist     "docker-php-entrypoi…"   5 seconds ago   Up 3 seconds   9000/tcp                                travellist-app
      2995a82595f7   mysql:5.7      "docker-entrypoint.s…"   5 seconds ago   Up 3 seconds   3306/tcp, 33060/tcp                     travellist-db
      736ede87e337   nginx:alpine   "/docker-entrypoint.…"   5 seconds ago   Up 3 seconds   0.0.0.0:8000->80/tcp, :::8000->80/tcp   travellist-nginx
       fernando@notebookdell-1487   /lab/treinamento/travellist-laravel-demo     main                                                                                                           10345  09:41:01  
      ```

      Como eu posso obter os logs do Laravel através do stdout do meu container no Docker?
    • Por mateus.andriollo
      Gostaria de saber se alguém tem uma trigger para fazer log de qualquer tipo de transação de dados em qualquer tabela do banco. Porém, preciso carregar um campo UserName que será setado a cada conexão via login php
      SET @UserName = 'ZeBala' Achei vários exemplos porém tenho q criar um trigger para cada tabela
       
      CREATE TRIGGER roles_audit_au AFTER UPDATE ON `<nome_tabela>` Existe uma forma de não ser direcionada?
    • Por Juliana Amaral
      Boa noite,
       
      Sou nova em fórum de Programaço.
      Tenho 19 anos e sempre gostei muito de programação
      Desculpe se estiver no local errado
       
      Entrei em uma empresa de TI e fiquei  designada a fazer os backups colocar a fita e tirar a que foi feita  e em cada fita Lto tem um código gerado assim que o backup e feito
      eu pego esta fita  entro em um Excel com todos os setores da empresa e coloco o nome da fita em seu campo com a dia da semana+dia do mes e o codigo da fita
       
      Eu queria uma ajuda pois não sei nada de programação e quero impressionar minha chefe fazendo uma pagina em html e inserindo as informações e inserindo em um banco
       
      Alguém pode me ajudar?
      Segue um modelo só pra entenderem
       
      Agradeço se puderem me ajudar

    • Por acneto.frc
      Bom dia a todos!
      Tenho uma rotina desenvolvida em Delphi onde eu gravo em uma tabela os campos alterados das tabelas do sistema.
      Preciso implementar essa rotina em javascript e não estou conseguindo obter os valores do campo alterado e o valor anterior (delta)
      É uma rotina muito útil para acompanhamento de operação do sitema
      Obrigado!

      begin
        DmCliente.CdsAlteracoes.Open;
       
        m_modificado := false;
       
        for i := 0 to CdsAtivo.Fields.Count - 1 do
          begin
            V := CdsAtivo.Fields.OldValue;
            V := VarType( V );
       
            if CdsAtivo.Fields.OldValue <> CdsAtivo.Fields.NewValue then
              begin
                m_modificado := true;
                with DmCliente.CdsAlteracoes do
                  begin
                    DmCliente.CdsAlteracoes.Append;
                    DmCliente.CdsAlteracoes.FieldByName('Alt_DtCadastro').AsString   := dateToStr( Date );
                    DmCliente.CdsAlteracoes.FieldByName('Alt_Horario').AsString      := TimeToStr( time() );
                    DmCliente.CdsAlteracoes.FieldByName('Alt_NomeTabela').AsString   := UpperCase(NomeTabela);
                    DmCliente.CdsAlteracoes.FieldByName('Alt_CampoChave').AsInteger  := CdsAtivo.Fields[0].OldValue;
                    DmCliente.CdsAlteracoes.FieldByName('Alt_NomeCampo').AsString    := CdsAtivo.Fields.FieldName;
       
                    Case CdsAtivo.Fields.DataType of   //   .FieldByName(Vle.Cells[ 0 , i ]).DataType of
                      ftString:
                      begin
                        if CdsAtivo.Fields.OldValue <> Null then
                          DmCliente.CdsAlteracoes.FieldByName('Alt_DadoOriginal').AsString := CdsAtivo.Fields.OldValue;
                        if CdsAtivo.Fields.NewValue <> Null then
                          DmCliente.CdsAlteracoes.FieldByName('Alt_DadoAlterado').AsString := CdsAtivo.Fields.NewValue;
                      end;
                    end;
       
                    DmCliente.CdsAlteracoes.FieldByName('Alt_NomeUsuario').AsString  := m_nomeusuario;
                    DmCliente.CdsAlteracoes.FieldByName('Alt_DtCadastro').AsDateTime := date();
                    DmCliente.CdsAlteracoes.FieldByName('Alt_Horario').AsString      := TimeToStr(time());
                    DmCliente.CdsAlteracoes.FieldByName('Alt_NomeMicro').AsString    := m_HostNome^.h_name;
                    DmCliente.CdsAlteracoes.FieldByName('Alt_IpMicro').AsString      := m_HostIp;
                    DmCliente.CdsAlteracoes.FieldByName('Usu_Codigo').AsInteger      := m_CodigoUsuario;
       
                    DmCliente.CdsAlteracoes.Post;
                  end;
              end;
          end;
       
        if m_modificado = true then
          DmCliente.CdsAlteracoes.ApplyUpdates(0);
       
        DmCliente.CdsAlteracoes.Close;
       
      end;
       
       
    • Por luisfeliperm2
      Como posso estar recebendo backups todos os dias do banco de dados postgresql através do meu email ? Preciso fazer isso no Windows 2012
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.