0

Я использую EntLib 6 для регистрации одного webapp. Поскольку я использую n-слои, я хотел поместить журнал в одну библиотеку, доступную из всех слоев.Регистрация в корпоративной библиотеке не входит в систему SQL

Я пытаюсь запустить ведение журнала, но ничего не happends, весь код работает, не исключение, но ничего не появляется в БД.

Так вот что я сделал:

я создал БД с помощью сценария, представленного в EntLib6 в БД, которая под DB_BELVAL Connexion строки, я ставлю этот код на С # тестом в портативном классе, который будет обрабатывать каротаж:

public static void LogToDatabase() 
     { 
      try 
      { 
       //Bootstrapping logging 
       DatabaseFactory.SetDatabaseProviderFactory(new DatabaseProviderFactory()); 
       IConfigurationSource configurationSource = ConfigurationSourceFactory.Create(); 
       LogWriterFactory logWriterFactory = new LogWriterFactory(configurationSource); 
       Logger.SetLogWriter(logWriterFactory.Create()); 

       if (Logger.IsLoggingEnabled()) 
       { 

        LogEntry log = GetLogEntry(); 
        log.Categories.Add("General"); // name of Categorie in EntLib Config editor 
        log.Priority = 5; 
        log.Severity = System.Diagnostics.TraceEventType.Information; 
        log.Message = "Hello dude, from AMLogger"; 
        Logger.Write(log); 

       } 

      } 
      catch (Exception ex) 
      { 
      } 
     } 

     private static LogEntry GetLogEntry() 
     { 
      LogEntry log = new LogEntry(); 
      log.TimeStamp = DateTime.Now; 
      log.Title = "TANOLIS"; 
      log.Priority = 5;      // default priority 
      log.Severity = System.Diagnostics.TraceEventType.Verbose; // default severity 
      log.MachineName = "MachineName";//HttpContext.Current.Server.MachineName; 
      log.ProcessId = System.Diagnostics.Process.GetCurrentProcess().Id.ToString(); 
      return log; 
     } 

И от UnitTest, я вызываю метод LogToDatabase() портативной библиотеки. Я настроил файл конфигурации модульного тестирования, как, что:

EntLib Editor

или XML:

<?xml version="1.0" encoding="utf-8" ?> 
<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> 
    <loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"> 
    <listeners> 
     <add name="Database Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.Database.FormattedDatabaseTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Database.Configuration.FormattedDatabaseTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging.Database, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     databaseInstanceName="DB_Belval" writeLogStoredProcName="WriteLog" 
     addCategoryStoredProcName="General" formatter="Text Formatter" /> 
    </listeners> 
    <formatters> 
     <add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     template="Timestamp: {timestamp}{newline}&#xA;Message: {message}{newline}&#xA;Category: {category}{newline}&#xA;Priority: {priority}{newline}&#xA;EventId: {eventid}{newline}&#xA;Severity: {severity}{newline}&#xA;Title:{title}{newline}&#xA;Machine: {localMachine}{newline}&#xA;App Domain: {localAppDomain}{newline}&#xA;ProcessId: {localProcessId}{newline}&#xA;Process Name: {localProcessName}{newline}&#xA;Thread Name: {threadName}{newline}&#xA;Win32 ThreadId:{win32ThreadId}{newline}&#xA;Extended Properties: {dictionary({key} - {value}{newline})}" 
     name="Text Formatter" /> 
    </formatters> 
    <categorySources> 
     <add switchValue="All" name="General"> 
     <listeners> 
      <add name="Database 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"> 
     <listeners> 
      <add name="Database Trace Listener" /> 
     </listeners> 
     </notProcessed> 
     <errors switchValue="All" name="Logging Errors &amp; Warnings"> 
     <listeners> 
      <add name="Database Trace Listener" /> 
     </listeners> 
     </errors> 
    </specialSources> 
    </loggingConfiguration> 
    <dataConfiguration defaultDatabase="DB_Belval" /> 
    <connectionStrings> 
    <add name="DB_Belval" connectionString="Data Source=serverIP;Initial Catalog=APP_Dev;Persist Security Info=True;User=login;Password=password" 
     providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
</configuration> 

В самом деле, ничего не happends, но я breakpointed в UnitTest и все выглядит верно, не исключение ,

Благодаря мне помочь

** EDIT 1: **: logWriterFactory выглядит он загружен XML: visual_studio

EDIT 2: Я редактировал хранимую процедуру [DBO] . [WriteLog] для того, чтобы сделать свой род флаг (один INSERT INTO [DBO] [TestLog].), чтобы знать, если хранимая процедура называется и выглядит, что приложение не вызывает хранимую процедуру:

ALTER PROCEDURE [dbo].[WriteLog] 
(
    @EventID int, 
    @Priority int, 
    @Severity nvarchar(32), 
    @Title nvarchar(256), 
    @Timestamp datetime, 
    @MachineName nvarchar(32), 
    @AppDomainName nvarchar(512), 
    @ProcessID nvarchar(256), 
    @ProcessName nvarchar(512), 
    @ThreadName nvarchar(512), 
    @Win32ThreadId nvarchar(128), 
    @Message nvarchar(1500), 
    @FormattedMessage ntext, 
    @LogId int OUTPUT 
) 
AS 


INSERT INTO [dbo].[TestLog] 
      ([text]) VALUES ('Storeproc1') 




    INSERT INTO [dbo].[Log] (
     EventID, 
     Priority, 
     Severity, 
     Title, 
     [Timestamp], 
     MachineName, 
     AppDomainName, 
     ProcessID, 
     ProcessName, 
     ThreadName, 
     Win32ThreadId, 
     Message, 
     FormattedMessage 
    ) 
    VALUES (
     @EventID, 
     @Priority, 
     @Severity, 
     @Title, 
     @Timestamp, 
     @MachineName, 
     @AppDomainName, 
     @ProcessID, 
     @ProcessName, 
     @ThreadName, 
     @Win32ThreadId, 
     @Message, 
     @FormattedMessage) 

    SET @LogID = @@IDENTITY 
    RETURN @LogID 

И нет новых строк в [dbo]. [TestLog], когда я запускаю UnitTest, поэтому проблема кажется в C#

+0

@lrb где? Я включил весь файл конфигурации UnitTest. Я полагаю, да, потому что Logger.IsLoggingEnabled() возвращает true, no? Спасибо dude – clement

+0

По какой-то причине флаг TracingEnabled показывает false на вашем шаге, пока вы настроили true в своей конфигурации. Я не знаю, если это проблема, просто наблюдение. –

+0

@lrb хорошее наблюдение, но на самом деле я просто сравнил и внесли некоторые изменения в свой конфиг из другого файла конфигурации (см. Здесь http://shahzy1.blogspot.com/2014/09/enterprise-library-6-logging-block. html). Он поместил трассировку в false, я попытался в моем, но это не сработало ... но спасибо (теперь я удаляю эту трассировку, и она тоже изменяется в переменной). – clement

ответ

1

Похоже, вы уже потратили некоторое время, вырывая ваши волосы. Мои 2 цента будут собирать столько отладочной информации, сколько сможете. У меня нет опыта работы с EL.

Вот мои советы;

  1. Я бы посоветовал вам отслеживать ВСЕ трансаситоны/запросы в целевой базе данных. Для этого просто откройте SQL Profiler из SSMS и запустите его без какого-либо фильтра, кроме имени базы данных (или всего вашего сервера). Кстати, это локальная или удаленная БД? Если вы удалены, отфильтруйте свое имя пользователя, чтобы избежать носа у других разработчиков/пользователей.

  2. Проверьте, нет отсутствующих DLL или погрузочных исключений брошенных EL. Используйте журнал Fusion. Я могу предоставить вам информацию о том, как его использовать, если это необходимо.

Запустите утилиту Fuslogvw.exe из инструментов MS SDK (C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ Bin \ NETFX 4.6 Tools), возьмите самую высокую версию. Запуск от имени администратора для редактирования параметров Fusion (набор пользовательских журнала Путь к «C: \ Fuslog») Создать директорию «C: \ Fuslog» (должна существовать для того, чтобы включить регистрацию). DISABLE fusion после того, как вы закончите.

  1. Из окна «Исключения» в Visual Studio отключите «Включить только мой код», включите «break when exception cross appdomain or ...» (последнее не имеет особого значения в ваше дело, мы никогда не знаем).

Вы также можете включить «.NET Framework Source Stepping», но для загрузки символов потребуется некоторое время.

Если вы идете на этот, убедитесь, что символы загружены корректно для EL, отобразив окно символов.

Подробнее здесь: http://blogs.msdn.com/b/saraford/archive/2008/08/26/did-you-know-how-to-load-symbols-from-the-modules-window-299.aspx

Держите нас в курсе!

+0

Большое спасибо за ваш ответ @andrew! Я не могу использовать профилировщик, потому что у меня не было права, но чтобы ответить на ваш Q, db удален. Я попробовал fusionLog (Assembly Binding Log Viewer), ничего не появляется, когда я регистрировал текст исключения, если это то, что я должен попробовать: -/ – clement

+0

, и если я проверю «перерыв при исключении cross appdomain ...», приложение запущено, ничего не меняется – clement

+0

мм «Есть ли какой-либо« отказ молчания », установленный по умолчанию в EL? Например, NLog имеет свойство throwExceptions. Если True будет кричать, если что-то пойдет не так, иначе ничего не скажу ... – andrew

Смежные вопросы