#c# #asp.net #enterprise-library #iis-8.5
#c# #asp.net #enterprise-библиотека #iis-8.5
Вопрос:
Я настроил ведение журнала электронной почты и базы данных с помощью Enterprise Library 6 в приложении .NET 4.5 MVC.
Все это хорошо работает при запуске в Visual Studio. Однако при развертывании на сервере он не работает, ничего не регистрируется.
Вот конфигурация, настроенная в web.config:
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
<section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" />
</configSections>
<!--logging start-->
<loggingConfiguration name="Logging Application Block" tracingEnabled="true"
defaultCategory="General" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database"
databaseInstanceName="procLoggingConnection" writeLogStoredProcName="WriteLog"
addCategoryStoredProcName="AddCategory" formatter="Text Formatter"
traceOutputOptions="None" filter="All" />
<add name="Email Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.EmailTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.EmailTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
toAddress="test@test.com" fromAddress="test@test.com"
subjectLineStarter="Test subject: " subjectLineEnder=" "
smtpServer="mailserver" formatter="Text Formatter" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging"
template="Timestamp: {timestamp} Message: {message} Category: {category} Priority: {priority} EventId: {eventid} Severity: {severity} Title:{title} Machine: {machine} Application Domain: {appDomain} Process Id: {processId} Process Name: {processName} Win32 Thread Id: {win32ThreadId} Thread Name: {threadName} Extended Properties: {dictionary({key} - {value} )}"
name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Database Trace Listener" />
<add name="Email Trace Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events">
<listeners>
<add name="Database Trace Listener" />
</listeners>
</allEvents>
<notProcessed switchValue="All" name="Unprocessed Category" />
<errors switchValue="All" name="Logging Errors amp;amp; Warnings" />
</specialSources>
</loggingConfiguration>
<dataConfiguration defaultDatabase="procLoggingConnection" />
<!--logging end-->
<connectionStrings>
<add name="procLoggingConnection" connectionString="my connection string here"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<customErrors mode="Off" />
<authentication mode="Windows" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" maxRequestLength="1048576" />
</system.web>
</configuration>
У меня есть этот код в файле global.asax:
protected void Application_Start()
{
IConfigurationSource configurationSource = ConfigurationSourceFactory.Create();
LogWriterFactory logWriterFactory = new LogWriterFactory(configurationSource);
DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory());
Logger.SetLogWriter(logWriterFactory.Create(), false);
}
При записи журнала я делаю это так:
var logEntry = new LogEntry
{
Title = "test log entry",
Message = fullExceptionInfo,
Severity = System.Diagnostics.TraceEventType.Error,
TimeStamp = DateTime.Now
};
Logger.Write(logEntry);
Я бы хотел, чтобы все это работало на сервере.
Комментарии:
1. Попробуйте запустить отладчик на сервере и посмотрите, выдает ли он ошибку при записи ошибки. Это может быть проблема с правами доступа к файлам.
2. @BlueEyedBehemoth Я запустил удаленный отладчик на сервере. Регистратор. Вызов Write не выдает ошибку.
3. Во время отладки убедитесь, что свойства регистратора верны и, похоже, настроены правильно.