Я использую 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() портативной библиотеки. Я настроил файл конфигурации модульного тестирования, как, что:
или 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}
Message: {message}{newline}
Category: {category}{newline}
Priority: {priority}{newline}
EventId: {eventid}{newline}
Severity: {severity}{newline}
Title:{title}{newline}
Machine: {localMachine}{newline}
App Domain: {localAppDomain}{newline}
ProcessId: {localProcessId}{newline}
Process Name: {localProcessName}{newline}
Thread Name: {threadName}{newline}
Win32 ThreadId:{win32ThreadId}{newline}
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 & 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:
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#
@lrb где? Я включил весь файл конфигурации UnitTest. Я полагаю, да, потому что Logger.IsLoggingEnabled() возвращает true, no? Спасибо dude – clement
По какой-то причине флаг TracingEnabled показывает false на вашем шаге, пока вы настроили true в своей конфигурации. Я не знаю, если это проблема, просто наблюдение. –
@lrb хорошее наблюдение, но на самом деле я просто сравнил и внесли некоторые изменения в свой конфиг из другого файла конфигурации (см. Здесь http://shahzy1.blogspot.com/2014/09/enterprise-library-6-logging-block. html). Он поместил трассировку в false, я попытался в моем, но это не сработало ... но спасибо (теперь я удаляю эту трассировку, и она тоже изменяется в переменной). – clement