More .NET libraries
- 
                                
                                    
                                
                                Rebex Mail Pack
                                IMAP, MS Graph, EWS, POP3, SMTP, MIME, S/MIME, MSG
 - 
                                
                                    
                                
                                Rebex Total Pack
                                All Rebex .NET libraries together
 
Back to feature list...
Communication logging
On this page:
Logging communication using LogWriter
Communication logs are very useful when troubleshooting issues at the SMTP protocol on communication level. Whenever you run into a problem, a log makes it possible to see what is going on.
    To start logging, just add the following line into your code
    (just after creating the Smtp client object):
// create client instance // ... // start logging to a file client.LogWriter = new Rebex.FileLogWriter(@"C:\MyData\log.txt");
' create client instance
' ...
' start logging to a file
client.LogWriter = New Rebex.FileLogWriter("C:\MyData\log.txt")
A sample SMTP log file :
2015-11-03 17:08:51.150 Opening log file.
2015-11-03 17:08:51.150 Using FileLogWriter version 2.0.0.0.
2015-11-03 17:08:51.156 INFO Smtp(1)[6] Info: Connecting to smtpserver.local:25 using Smtp 2.0.0.0.
2015-11-03 17:08:51.279 INFO Smtp(1)[6] Response: 220 smtpserver.local Microsoft ESMTP MAIL Service ready at Fri, 3 Oct 2014 17:08:50 +0200
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Command: EHLO myworkstation.local
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-wsmtpserver.local Hello [192.168.1.2]
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-SIZE
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-PIPELINING
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-DSN
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-ENHANCEDSTATUSCODES
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-STARTTLS
2015-11-03 17:08:51.284 INFO Smtp(1)[6] Response: 250-X-ANONYMOUSTLS
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-AUTH NTLM LOGIN
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-X-EXPS GSSAPI NTLM
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-8BITMIME
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-BINARYMIME
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-CHUNKING
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-XEXCH50
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250-XRDST
2015-11-03 17:08:51.285 INFO Smtp(1)[6] Response: 250 XSHADOW
2015-11-03 17:08:51.300 INFO Smtp(1)[6] Command: QUIT
    Log verbosity levels
There are several levels of log verbosity:
- Error - logs error messages only
 - Info - default level; logs important informative messages as well
 - Debug - logs all messages useful for debugging purposes
 - 
        Verbose - very detailed log for advanced analysis; logs content of communication packets
Warning: At the Verbose level, user credentials are written to the log as well. 
    To specify a log level, just pass an argument to FileLogWriter's constructor:
// create client instance
// ...
// start logging to a file at debug level
client.LogWriter = new Rebex.FileLogWriter(
    @"C:\MyData\log.txt", Rebex.LogLevel.Debug);
' create client instance
' ...
' start logging to a file at debug level
client.LogWriter = New Rebex.FileLogWriter("C:\MyData\log.txt", Rebex.LogLevel.Debug)
Built-in log writers
Text file
    To log into a text file, use FileLogWriter:
// create client instance
// ...
// start logging to a file at debug level
client.LogWriter = new Rebex.FileLogWriter(
    @"C:\MyData\log.txt", Rebex.LogLevel.Debug);
' create client instance
' ...
' start logging to a file at debug level
client.LogWriter = New Rebex.FileLogWriter("C:\MyData\log.txt", Rebex.LogLevel.Debug)
.NET trace listener
    To log to .NET Trace Listeners, use TraceLogWriter:
// create client instance // ... // start logging to subscribed trace listeners client.LogWriter = new Rebex.TraceLogWriter(Rebex.LogLevel.Debug);
' create client instance ' ... ' start logging to subscribed trace listeners client.LogWriter = New Rebex.TraceLogWriter(Rebex.LogLevel.Debug)
Standard output stream
    To log to the standard output stream, use ConsoleLogWriter:
// create client instance // ... // start logging to the standard output stream at debug level client.LogWriter = new Rebex.ConsoleLogWriter(Rebex.LogLevel.Debug);
' create client instance ' ... ' start logging to the standard output stream at debug level client.LogWriter = New Rebex.ConsoleLogWriter(Rebex.LogLevel.Debug)
Logging to multiple log writers
    To log to more log writers at the same time, use TeeLogWriter:
var consoleLogWriter = new Rebex.ConsoleLogWriter(Rebex.LogLevel.Debug); var fileLogWriter = new Rebex.FileLogWriter(@"C:\MyData\log.txt", Rebex.LogLevel.Info); // start logging to both console and file log writers client.LogWriter = new Rebex.TeeLogWriter(consoleLogWriter, fileLogWriter);
Dim consoleLogWriter = New Rebex.ConsoleLogWriter(Rebex.LogLevel.Debug)
Dim fileLogWriter = New Rebex.FileLogWriter("C:\MyData\log.txt", Rebex.LogLevel.Debug)
' start logging to both console and file log writers
client.LogWriter = New Rebex.TeeLogWriter(consoleLogWriter, fileLogWriter)
Writing custom log writers
To implement your own LogWriter, either implementRebex.ILogWriter interface or simply derive a class from Rebex.LogWriterBase:
// Sample log writer that logs to the standard error output stream
public class MyLogWriter : LogWriterBase
{
    protected override void WriteMessage(string message)
    {
        Console.Error.WriteLine("Rebex: {0}", message);
    }
}
' Sample log writer that logs to the standard error output stream
Public Class MyLogWriter
    Inherits LogWriterBase
    Protected Overrides Sub WriteMessage(message As String)
        Console.Error.WriteLine("Rebex: {0}", message)
    End Sub
End Class
Back to feature list...