所以,有一天我和一个人谈论了 Enterprise Library Logging Application Block 和 log4net。
我注意到 log4net 声称: log4net 不可靠。它是一个尽力而为、故障停止的日志系统。
令人惊讶的是,我试图找出企业库日志记录是否“可靠”。这是我能找到的所有明确使用“可靠”一词的地方。(注意是2004年的版本)
所以,这让我很好奇,“可靠”日志记录到底是什么?如果有人知道企业库日志记录应用程序块是否可靠(在当前版本中),他们能否向我指出一些明确说明这一点的文档?
谢谢。
我正在使用EntLib v4进行日志记录,目前我将事件保存到默认文本文件侦听器.
我想使用MS SQL数据库作为我的事件接收器,我看到已经提供了数据库监听器,但我不知道如何创建日志数据库和存储过程?
在谷歌搜索后,我看到在v3中,数据库创建脚本随EntLib一起提供,但我在v4中找不到它们.
我有一些库代码,可以从我的应用程序中使用,也可以在Visual Studio安装程序项目中由.NET自定义操作使用.库代码依次使用Enterprise Library日志记录块来进行日志记录.如何在msiexec中运行的自定义操作的上下文中获取企业库的配置信息?在对EntLib进行任何调用之前,是否可以在代码中引导配置机制?
更新:我已经制作了一个似乎可以工作但仍依赖于使用反射设置非公共静态字段的黑客.令人遗憾的是,EntLib与.NET ConfigurationManager紧密耦合.
var factory = new LogWriterFactory( new FakeConfigSource( "foo.config" ) );
var field = typeof ( Logger ).GetField( "factory", BindingFlags.Static | BindingFlags.NonPublic );
field.SetValue( null, factory );
Logger.Write( "Test" );
Run Code Online (Sandbox Code Playgroud)
更新2:虽然该hack在测试平台中有效,但在msiexec的上下文中运行时,程序集加载程序找不到配置文件中引用的程序集.Fuslogvw表明AppBase是windows system32目录,这是有道理的.我不明白为什么找到自定义操作程序集的清单依赖项(在[TargetDir]目录中与自定义操作程序集一起),但是在配置文件中调出的动态加载程序集不是.围绕这个看不出任何办法.
.net windows-installer enterprise-library app-config custom-action
是否可以为AzMan XML存储指定相对连接字符串?
我当前的连接字符串是,connectionString="msxml://c:/azman.xml"但我真的需要使这个相对,所以其他开发人员和自动构建可以获得最新的授权存储.
MS文档似乎表明connectionString="msxml://azman.xml"应该工作,但会引发The request is not supported错误.
编辑:我意识到我通过企业库安全应用程序块使用AzMan的事实对于这个问题非常重要.
我有一些使用SqlBulkCopy的代码.现在我们重构我们的代码以使用Enterprise Library数据库函数而不是标准函数.问题是如何实例化SqlBulkCopy?它接受SqlConnection,我只有DbConnection.
var bulkCopy = new SqlBulkCopy(connection) // here connection is SqlConnection
{
BatchSize = Settings.Default.BulkInsertBatchSize,
NotifyAfter = 200,
DestinationTableName = "Contacts"
};
Run Code Online (Sandbox Code Playgroud) 我有两个接口,都是由Apple类实现的
interface a { }
interface b { }
class Apple: a,b
{
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我在两个接口上注册Apple,但只有一个使用ContainerControlledLifeTimeManager,那么解析另一个接口也会返回相同的实例.为什么这是它的方式,无论如何解决它?
IUnityContainer container = new UnityContainer();
container.RegisterType<a, Apple>(new ContainerControlledLifetimeManager());
container.RegisterType<b, Apple>();
var a = container.Resolve<a>();
Console.WriteLine(container.Resolve<b>().Equals(a).ToString());
Run Code Online (Sandbox Code Playgroud) 我正在尝试轮换日志文件,每周一天,此配置文件无法正常工作.如果我将其更改为旋转而不是午夜到分钟,则仅记录一个持续一分钟的单个文件.没有生成新文件.是否有任何已知的最新版本的企业库的错误,专注于滚动平面文件无法正常工作?我当前的配置有问题吗?谢谢!
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General"
revertImpersonation="false">
<listeners>
<add name="Rolling Flat File Trace Listener" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollingFlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.RollingFlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
fileName="C:\EMS\logs\MobileMessagingServices.log" footer="" formatter="Text Formatter"
header="" rollFileExistsBehavior="Increment" rollInterval="Midnight"
rollSizeKB="100000" timeStampPattern="yyyy-MM-dd hh:mm:ss" maxArchivedFiles="7"
traceOutputOptions="Timestamp, Callstack" filter="All" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="{timestamp} :: {category} :: {message}" name="Text Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Rolling Flat File Trace Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events">
<listeners>
<add name="Rolling Flat File …Run Code Online (Sandbox Code Playgroud) 我有一个配置文件,如:
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
</configSections>
<loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="Tracing" logWarningsWhenNoCategoriesMatch="true">
<listeners>
<add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.SystemDiagnosticsTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" type="System.Diagnostics.ConsoleTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="System Diagnostics Trace Listener"/>
</listeners>
<formatters>
<add template="{message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="Text Formatter"/>
</formatters>
<categorySources>
<add switchValue="All" name="AppLog">
<listeners>
<add name="System Diagnostics Trace Listener"/>
</listeners>
</add>
</categorySources>
<specialSources>
<allEvents switchValue="All" name="All Events"/>
<notProcessed switchValue="All" name="Unprocessed Category"/>
<errors switchValue="Off" name="Logging Errors & Warnings"/>
</specialSources>
Run Code Online (Sandbox Code Playgroud)
除了我的控制台监听器,我想以编程方式定义RollingFlatFileTraceListenerData:
var listener = new RollingFlatFileTraceListenerData("AppLog", …Run Code Online (Sandbox Code Playgroud) 我目前正在使用Microsoft Enterprise Library Data Access 5.0来执行存储过程.
Database myDatabase = DatabaseFactory.CreateDatabase();
using (DbCommand command = myDatabase.GetStoredProcCommand("myStoredProc"))
{
//Add parameters here
using (IDataReader dataReader = myDatabase.ExecuteReader(command))
{
while (dataReader.Read())
{
}
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常但运行需要很长时间.当我打开SQL事件探查器时,我可以看到存储过程大约需要50秒才能运行.但是,如果我从Profiler中获取相同的脚本并在SQL Management Studio中运行它,则返回所有行只需要大约480毫秒.
有没有人遇到过这个问题?为什么会有很大的不同?
我正在尝试使用MVC 4开发应用程序.之前我使用Generic存储库来访问我的数据库.但后来我建议用Data Access Application Block我的应用程序访问数据库.
我没有得到任何确切的线索,如何从它开始.任何人都可以建议一些链接,它可以为我提供有关.NET 4.5和MVC 4的数据访问应用程序块的确切信息,以及它的正确用法的一些示例.
提前致谢..