diff --git a/caco.png b/caco.png
deleted file mode 100644
index ed7f7696f6c27460bde083a10214df0d9473b37f..0000000000000000000000000000000000000000
Binary files a/caco.png and /dev/null differ
diff --git a/headers/client.h b/headers/client.h
index 8c1f21f56602248953dcb1548ecbf144e43fbd71..b87b70e6513d3ba1f48449f4c88c824da3827ed0 100644
--- a/headers/client.h
+++ b/headers/client.h
@@ -32,6 +32,7 @@ private:
   int soquete;
   vector<frame *> framesMidia;
   conexao *socket;
+  ofstream *log_client;
 
   // ---------- Funcoes -------- //
   int send_frames(vector<frame *> frames);
@@ -51,6 +52,7 @@ private:
   string calc_file_size(string fileName);
   vector<char> read_file(string fileName);
 
+
 public:
   // --------- Dados ---------- //
   string userInput;
@@ -125,11 +127,11 @@ int client::start_transmission() {
 
 // Encerra a transmissao com o servidor
 int client::end_transmission() {
-  cout << "\tEncerrando a transmissao\n"; // ->log
+  // cout << "\tEncerrando a transmissao\n"; // ->log
   frame *end = new frame(FIMT, 0, vector<char>(1, 0));
   frame *enviado = send_frame_socket(end);
   if (!enviado) {
-    cout << "\tFalha ao encerrar a transmissao\n"; // ->log
+    // cout << "\tFalha ao encerrar a transmissao\n"; // ->log
     return 0;
   }
 
@@ -167,8 +169,8 @@ int client::send_frames(vector<frame *> frames) {
       if (iniJanela + frameCounter == frames.size()) { break; }
       janela.push((iniJanela + frameCounter) % 16);
 
-      cout << "\tEnviando frame: " << iniJanela + frameCounter << "\n"; 
-      frames[iniJanela + frameCounter]->imprime(DEC);
+      // cout << "\tEnviando frame: " << iniJanela + frameCounter << "\n"; 
+      // frames[iniJanela + frameCounter]->imprime(DEC);
     
       if (socket->send_frame(frames[iniJanela + frameCounter]) == -1) {
         // cout << "Falha ao enviar o frame\n"; ->log
@@ -180,7 +182,7 @@ int client::send_frames(vector<frame *> frames) {
 
     // Recebe a resposta do servidor
     while (!janela.empty()) {
-      cout << "Janela size: " << janela.size() << "\n";
+      // cout << "Janela size: " << janela.size() << "\n";
       frame *res = NULL;
       int retries = 0;
 
@@ -194,9 +196,9 @@ int client::send_frames(vector<frame *> frames) {
          
          break; }
 
-      cout << "Resposta recebida\n";
-      cout << "Numero ack/nack: " << (int)res->get_dado()[0] << " ---- "
-           << "Janela front: " << janela.front() << "\n";
+      // cout << "Resposta recebida\n";
+      // cout << "Numero ack/nack: " << (int)res->get_dado()[0] << " ---- "
+      //      << "Janela front: " << janela.front() << "\n";
 
       if (res->get_tipo() == NACK && res->get_dado()[0] == janela.front()) {
         // cout << "NACK " << (int)res->get_dado()[0] << " recebido\n"; ->log
@@ -214,7 +216,7 @@ int client::send_frames(vector<frame *> frames) {
       }
 
       if (res->get_tipo() == ACK && res->get_dado()[0] == janela.front()) {
-        cout << "ACK " << (int)res->get_dado()[0] << " recebido\n";
+        // cout << "ACK " << (int)res->get_dado()[0] << " recebido\n";
         iniJanela++;
         janela.pop();
       }
@@ -225,7 +227,7 @@ int client::send_frames(vector<frame *> frames) {
     //   janela.pop();
   }
 
-  cout << "\tTerminou de enviar todos os frames\n"; //->log
+  // cout << "\tTerminou de enviar todos os frames\n"; //->log
   return 1;
 }
 
@@ -431,6 +433,13 @@ void client::print_help() {
 
 void client::run() {
   int i;
+  log_client = new ofstream("log_client.txt");
+  log_client->open("log_client.txt", ios::out | ios::app);
+  if (!log_client->is_open()) {
+    cout<< BOLDRED << "Falha ao abrir o arquivo de log\n";
+    exit(1);
+  }
+  log_client->write("Inicio sessao com" + soquete, 100);
   print_help();
   while (true) {
     cout << BOLDYELLOW << "\nDigite um comando ou mensagem:\n" << RESET;
@@ -461,6 +470,7 @@ void client::run() {
       break;
     }
   }
+  log_client->close();
 }
 
 #endif
diff --git a/headers/conexao.h b/headers/conexao.h
index cf2fd6b1dcc6c6bc6d698a5967b5830a4e109fdd..475c090b0ab9520c238f18271b3ad5b52946db35 100644
--- a/headers/conexao.h
+++ b/headers/conexao.h
@@ -112,13 +112,13 @@ int conexao::send_frame(frame *f) {
   int timeout = 0;
 
   int byteSend = send(device, bufferSend, sizeof(frame) * 2, 0);
-  printf("send %d: ", byteSend);
+  // printf("send %d: ", byteSend);
   for (int i = 0; i < byteSend; i++) {
-    cout << hex << (int(bufferSend[i]) & 0xff) << " ";
+    // cout << hex << (int(bufferSend[i]) & 0xff) << " ";
   }
-  cout << "\n";
+  // cout << "\n";
   if (byteSend < 0) {
-    cout << "Erro no sendto" << byteSend << "\n";
+    // cout << "Erro no sendto" << byteSend << "\n";
     return -1;
   }
 
diff --git a/headers/server.h b/headers/server.h
index e4cb4f7b0e1b33218c8aa934c07ff3a7379cc089..f6e6e0fe1f62bac9c8849ab93433e272867a9539 100644
--- a/headers/server.h
+++ b/headers/server.h
@@ -126,7 +126,7 @@ int server::send_ack(frame *fReceive) {
     return -1;
   }
 
-  cout << "ACK " << (int)fReceive->get_seq() << " enviado\n";
+  // cout << "ACK " << (int)fReceive->get_seq() << " enviado\n";
 
   return ackSent;
 }
@@ -262,7 +262,10 @@ string server::create_file_destination(string fileName) {
        << fileDestination << BOLDYELLOW
        << ". Digite novo nome ou enter para continuar: " << RESET;
   string newDestination = "";
+  // clear line cin
+  cin.ignore(numeric_limits<streamsize>::max(), '\n');
   getline(cin, newDestination);
+
   if (!newDestination.empty() && newDestination != "\n") {
     fileDestination = newDestination;
   }
@@ -337,7 +340,7 @@ frame *server::receive_frame_socket() {
   } while (fReceive == NULL && retries < NUM_RETRIES);
 
   if (fReceive == NULL && retries == NUM_RETRIES) {
-    cout << "Desisti de receber o frame\n"; //->log
+    // cout << "Desisti de receber o frame\n"; //->log
     return NULL;
   }
 
@@ -349,16 +352,16 @@ queue<frame *> server::receive_frames_window(int lastSeq) {
   frame *f;
 
   do {
-    cout << "Recebendo frame\n";
+    // cout << "Recebendo frame\n";
     if (!(f = receive_frame_socket())) { break; }
-    cout << "Frame recebido:\n";
+    // cout << "Frame recebido:\n";
 
     int tipo = f->get_tipo();
-    f->imprime(DEC);
+    // f->imprime(DEC);
 
     // Adiciona o frame de fim de transmissao
     if (tipo == FIMT) {
-      cout << "Frame FIMT recebido\n";
+      // cout << "Frame FIMT recebido\n";
       frames_queue.push(f);
       break;
     }
@@ -439,8 +442,8 @@ void server::start_receveing_message() {
       }
 
       // cout << "Frame recebido: \n"; ->log
-      f->imprime(DEC);
-      cout << "\n";
+      // f->imprime(DEC);
+      // cout << "\n";
 
       int tipo = f->get_tipo();
       int tam = f->get_tam();
@@ -448,7 +451,7 @@ void server::start_receveing_message() {
 
       switch (tipo) {
       case FIMT:
-        cout << "Encerrou a transmissao\n";
+        // cout << "Encerrou a transmissao\n";
         continueTransmission = 0;
         break;
 
@@ -494,7 +497,7 @@ void server::start_receveing_message() {
       //   cout << "ACK " << (int)f_answer->get_dado()[0] << " enviado\n"; ->log
     }
 
-    cout << "Todos os ACKs e NACKs foram enviados\n";
+    // cout << "Todos os ACKs e NACKs foram enviados\n";
 
   } while (continueTransmission);
 
diff --git a/log_client.txt b/log_client.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391