2014-07-12 12 views
5

Ho un'istanza di database MongoDb locale (creata eseguendo mongod dalla riga di comando di Windows) e un semplice programma di console che tenta di registrare una stringa nel database MongoDb utilizzando Serilog e il relativo MongoDb affondare:Serilog: impossibile accedere a MongoDb utilizzando il lavandino MongoDb

 var log = new LoggerConfiguration() 
      .MinimumLevel.Debug() 
      .WriteTo.ColoredConsole() 
      .WriteTo.MongoDB("mongodb://localhost/mydb") 
      .CreateLogger(); 

     log.Fatal("Fatal message"); 

il messaggio "messaggio fatale" è scritto correttamente alla console, ma non per il mio database MongoDb.

Il mio attuale database MongoDb è "mydb". Secondo "mostra collezioni", ho solo collezioni system.indexes e testData, e "db.testData.find()" non produce nulla.

Il sito Serilog dice di utilizzare la stringa di connessione "mongo: // mydb/log", ma che genera un'eccezione "Un'eccezione non gestita di tipo 'System.FormatException' si è verificata in MongoDB.Driver.dll". La stringa di connessione che ho usato nel mio codice è specificata sul sito MongoDb, al http://docs.mongodb.org/manual/reference/connection-string/

Come posso accedere a MongoDb usando Serilog?

risposta

5

È possibile che si verifichi solo il ritardo di buffering predefinito (due secondi?): Se si chiude un'app console in Windows, il programma si interrompe per evitare che i buffer vengano sempre scaricati. In attesa di alcuni secondi prima di chiudere l'app risolverà questo caso.

In caso contrario, il modo di affrontare tutto il debug lavandino in Serilog è quello di impostare SelfLog.Out:

SelfLog.Out = Console.Error; 

Questo stamperà le eventuali eccezioni sollevate dal lavandino, che consente di ingrandire l'errore abbastanza rapidamente se è lì è.

+0

Grazie, darò che una prova. C'è un modo per impostare il ritardo di buffering su 0? Ciò renderà il test molto più semplice. – user1147862

+0

Passare 'periodo: TimeSpan.Zero' dovrebbe farlo. –

+0

(Anche se qualche millisecondo può essere più sano di mente - l'IIRC totalmente non testato di zero :)) –

1

Interessante, mi è stato sempre lo stesso errore esatto fino a quando ho acceso la stringa di connessione per essere

mongodb: // myMachineName/mydb

Prima, ho avuto mongo: // localhost/mydb.

Ma mentre mongo vs mongodb ha risolto il problema di eccezione, non stava inserendo record in mydb! Così ho cambiato in

.WriteTo.MongoDB ("mongodb: // localhost/logs", restrictedToMinimumLevel: LogEventLevel.Verbose)

e ora si sta lavorando! "logs" è stato creato con "log" come una raccolta che conteneva i dati JSON.

Problemi correlati