WSMLogger: um substituto do NSLog para depuração de código multithread

A ferramenta de depuração mais eficaz ainda é um pensamento cuidadoso, juntamente com instruções de impressão colocadas criteriosamente.

 Brian W. Kernighan

Quando comecei a codificar Objective-C, confiei no NSLog para entender como o código estava fluindo. Gostaria de imprimir declarações como esta:

NSLog(@"WSPL:overlaysWithWSActivity:MID01 count: withActivity: Looping through activity of size %i", newActivity.coordinates.count);

Olhando para trás, obviamente, essa não é a maneira de fazer as coisas. “WSPL” foi uma forma de obter qual arquivo estava registrando este comando. Em seguida, imprimi manualmente o método (“overlaysWithWSActivity: count: withActivity”). O token “MID01” era uma forma de identificar em que linha eu estava realmente. Por fim, coloquei o bit de informação real que eu queria “Looping por momentos”.

Felizmente, me deparei com CocoaLumberjack. A biblioteca vem com vários registradores integrados que você pode personalizar ao seu gosto, mas não me deu o nível de detalhe que eu precisava. As deficiências vieram particularmente aparentes ao trabalhar em código multithread. Embora eu estivesse obtendo as informações de que precisava, não sabia de qual thread ou fila o trabalho estava sendo executado.

Minha solução para todos esses problemas veio na forma de WSMLogger. Agora recebo declarações de log que codifico assim:

NSLog(@“Nice”); 

Mas uma saída parecida com esta:

01:03.147-main[AppDelegate     |-[AppDelegate application:didFinishLaunc] Nice!

Por que isso é melhor? Ao lidar com código multithread, os milissegundos são importantes. Portanto, optei por apenas minutos, segundos e nanossegundos como o carimbo de data / hora. O thread, o nome do arquivo, o objeto e o método são impressos automaticamente. E, finalmente, posso controlar o comprimento individual de caracteres que cada componente obtém por instrução de log. Então, como você usa esse registro incrível.

  1. Você deve aprender a usar Cocoapods.
  2. Adicione o seguinte ao seu Podfile:

    pod ‘WSMLogger’

  3. Para facilidade de uso, adicione WSMLogger / WSMLogger.h ao seu arquivo .pch.

  4. A partir de agora, todas as instruções NSLog serão substituídas por uma macro C que chamará DDLog.

  5. Adicione ao seu arquivo AppDelegate um método de carregamento de classe com as configurações que você deseja para o WSMLogger.

  6. Por exemplo, eu uso:

+ (void)load {
WSMLogger *logger = WSMLogger.sharedInstance;
[DDLog addLogger:logger];

// Customize the WSLogger
logger
.formatStyle = kWSMLogFormatStyleQueue;
logger
[kWSMLogFormatKeyFile] = @16;
logger
[kWSMLogFormatKeyFunction] = @40;
}

O que esse trecho de texto faz? Em primeiro lugar, ele cria o WSMLogger e o registra no CocoaLumberjack. Em segundo lugar, ele define o estilo a ser usado (criei estilos diferentes no WSMLogger). Finalmente, ele define o número de caracteres a serem usados ​​para o nome do Arquivo e Método.

É isso aí! Todas as suas instruções NSLog pré-existentes serão geradas automaticamente com o novo formato que você personalizou.