3
votes

I'm trying to get my logging component to work as I want. When I came across this post How to configure Enterpise Library 6.0 logging to database?

I discovered that the Formatter:

<formatters>
  <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" template="Application: {property(ApplicationName)}{newline}&#xA;Guid: {property(HandlingInstanceId)}{newline}&#xA;Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Exception type: {property(ExceptionType)}{newline}&#xA;Category: {category}{newline}&#xA;Severity: {severity}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Stack trace: {property(StackTrace)}{newline}&#xA;File: {property(FileName)}{newline}&#xA;Line: {property(LineNumber)}{newline}"
  name="Text Formatter" />
</formatters>

contains "Text Formatter Template Tokens" which I don't know how to use?

"Stack trace: {property(StackTrace)}{newline}&#xA"

My logging class at the moment looks like this:

    public class Logging : Microsoft.Practices.EnterpriseLibrary.Logging.LogEntry
{     
    /// <summary>
    /// Logs an error message.
    /// </summary>
    /// <param name="Message"></param>
    /// <param name="processEvent"></param>
    public void LogToFile(string message, System.Diagnostics.TraceEventType severity)
    {
        try
        {
            LogWriterFactory logWriterFactory = new LogWriterFactory();
            LogWriter logWriter = logWriterFactory.Create();
            LogEntry logEntry = new LogEntry();
            LogSource logsource = new LogSource("ESRAlarmStatistik");

            logEntry.Message = message.ToString();
            //logEntry.EventId = Convert.ToInt32(processEvent);
            logEntry.Priority = 2;
            logEntry.Severity = severity;
            logEntry.TimeStamp = System.DateTime.Now;

            logWriter.Write(logEntry);

            //Unlocks the logfile so that it's possible to delete it.
            logWriter.Dispose();
        }
        catch (LoggingException ex)
        {
            throw ex;
        }
    }
}

I would like to log more information about the exception than just the message. E.g. the stack trace as the Text Formatter Template Token suggest is possible.

However, I don't know how to do that? Has anybody any experience of how to implement support for a text formatter like the one above?

The log output looks like this at the moment:

----------------------------------------
Application: <Error: property ApplicationName not found>

Guid: <Error: property HandlingInstanceId not found>

Timestamp: 2016-04-03 10:16:20

Message: IngresDatabaseAccessor.DBConnect() - Database connection failed. Connection string: Host=192.168.0.114;User Id=ingres;PWD=ingres;Database=esra_bas---Database does not exist: 'esrk_bas'.
The connection to the server has been aborted.

Exception type: <Error: property ExceptionType not found>

Category: General

Severity: Error

Machine: KSD53

App Domain: ESRAlarmStatistik.exe

ProcessId: 15464

Process Name: C:\DATA\Development\Uddeholm\ESR\Source\Common\ESRAlarmStatistik\ESRAlarmStatistik\bin\Debug\ESRAlarmStatistik.exe

Stack trace: <Error: property StackTrace not found>

File: <Error: property FileName not found>

Line: <Error: property LineNumber not found>

----------------------------------------

Kind regards!

P.s. I'm using Enterprise Library 6.0

1

1 Answers

0
votes

it looks, like your

LogEntry logEntry = new LogEntry();

does not contains properties, requested by the formatter:

logEntry.StackTrace = "missing Informaton in your LogToFile Method"

So I think, you have to extend this.