- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个 asp.net、dot net 4 网络应用程序,使用 log4net 进行日志记录。我们记录到 Windows 事件日志和 Oracle 11g 表。除了Application_Start之外,我们可以在任何地方登录到oracle表。真正烦人的事情是什么?它默默地失败了。打开控制台日志记录,并重定向到一个文件,在我们开始记录之前的最后一个条目是“将名为 [AdoNetAppender] 的附加程序添加到记录器 [root]”。 Repository.Configured(对于 log4net-default-repository)此时对所有记录器都是正确的。反转附加程序在配置文件中出现的顺序无效。
配置文件的log4net部分:
<log4net debug="true"> <!-- log4net.Internal.Debug set to true in appSettings, System.Diagnostics.Trace is output to file.>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="LogName" value="AppLog" />
<param name="ApplicationName" value="AppName" />
<!-- Only log warnings and errors. Levels are ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
<threshold value="INFO" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%utcdate{MM/dd/yyyy HH:mm:ss} [%property{log4net:HostName}] %-5level WEBUI[%logger] [%u] %message%newline" />
</layout>
</appender>
<appender name="AdoNetAppender" type="Logging.CustomAdoNetAppender, Logging"> <!-- So it can find the custom appender-->
<ConnectionStringName value="Database"/>
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<bufferSize value="1"/><!--This is the number of log entries, not the size in bytes... "1" sets to no buffering -->
<commandText value="audit_tracking.Add_log" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="I_Thread" />
<dbType value="AnsiString" /> <!--AnsiString is VarChar. "String" will assume NVarChar -->
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"></conversionPattern>
</layout>
</parameter>
<parameter>
<parameterName value="I_Log_Level" />
<dbType value="AnsiString" />
<size value="225" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value="I_Logger" />
<dbType value="AnsiString" />
<size value="225" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value="I_Message" />
<dbType value="AnsiString" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
<parameter>
<parameterName value="I_Exception_Str" />
<dbType value="AnsiString" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%exception"/>
</layout>
</parameter>
<parameter>
<parameterName value="I_Server_Name" />
<dbType value="AnsiString" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}"/>
</layout>
</parameter>
<parameter>
<parameterName value="I_User_Name" />
<dbType value="AnsiString" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{UserName}"/>
</layout>
</parameter>
<parameter>
<parameterName value="I_User_Id" />
<dbType value="Int64" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{UserId}"/>
</layout>
</parameter>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="EventLogAppender" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
C# 部分:
protected void Application_Start(object sender, EventArgs e)
{
read_init_data();//reads some init data from the db and caches it <-- this works, btw.
//log4net.Config.XmlConfigurator.Configure();//not needed since we config in AssemblyInfo.cs
log4net.GlobalContext.Properties["UserName"] = "";//HttpContext.Current.User.Identity.Name does not exist yet
log4net.GlobalContext.Properties["UserId"] = "0";//so we can't get a user id, either...
log4net.ILog logger = log4net.LogManager.GetLogger("Global");
logger.Info("Application Start");//logs to event log but not to db...
}
protected void Session_Start(object sender, EventArgs e)
{
ulong UserId=GetUserId(HttpContext.Current.User.Identity.Name);//db call to get user id.
//log4net.Config.XmlConfigurator.Configure();//not needed since we config in AssemblyInfo.cs
log4net.GlobalContext.Properties["UserName"] = HttpContext.Current.User.Identity.Name;
log4net.GlobalContext.Properties["UserId"] = UserId;
log4net.ILog logger = log4net.LogManager.GetLogger("Global");
logger.Info("Session_Start");//logs to event log and db
}
public class CustomAdoNetAppender : AdoNetAppender
{
public string ConnectionStringName
{
set { ConnectionString = ConfigurationManager.ConnectionStrings[value].ToString(); }
}
}
有什么想法吗?
最佳答案
尝试在 visual studio 中打开所有异常的中断,看看 log4net 中是否抛出异常,它会捕获并吞下但可能会告诉您原因。
这在过去因为数据库用户登录错误而没有登录数据库时对我有帮助。
关于c# - log4net AdoNetAppender 在 Application_Start() 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578291/
我研究了很多但一无所获...... Application_Start 事件在发布站点时未触发。但是它在本地主机上运行良好。发布后,我在 Bin 文件夹中获得了 App_global.asax.dll
我在 global.asax 文件的 application_start() 方法中编写了一些代码。当我在 IIS 服务器上部署我的应用程序时,它不会被调用。当我在 .NET 框架中运行代码时,它是可
我们目前使用这行代码来获取 Application_Start 事件中的当前应用程序 url。 string sApplicationURL = HttpContext.Current.Request
我有一个正在开发的 ASP.NET MVC(测试版)应用程序,但我无法确定是我做错了什么,还是我的 Application_Start 方法在 Global.当我尝试调试应用程序时,asax.cs 实
我有一个在 asp.net MVC 2 上制作的应用程序,它位于我电脑上的 IIS 7.5 上,我尝试对其进行分析,发现 Application_Start 被调用多次, 有人知道为什么会发生这种情况
我正在使用 sitecore 7.5,我需要在 application_start 中添加新路由以便在 ajax 调用中使用它,但是当我运行应用程序时,sitecore 似乎将路由作为内容项处理,请提
我必须处理用 .NET Framework 1.1 编写的遗留 ASP.NET 应用程序。在检查应用程序代码时,我发现了有趣的部分。应用程序在 Application_Start 事件处理程序 (Gl
是否可以在 Application_Start 上创建一个可以在所有 Controller 中使用的类实例? 我希望能够创建例如: var globalHelper = new LoadsStuff(
我希望将这篇文章塑造成一个合法的 StackOverflow 问题,因为我真的很想深入了解这种情况,但我绝对可以看看它是否过于本地化或被视为“意见”。 这是我的场景:当我加载我的网络应用程序时,我从数
我一直在尝试在全局 asax 的 Application_Start 事件上获取我的项目的应用程序路径我可以在未路由的页面上使用 server.mappath 但是当我在路由页面上时我得到新的虚拟pa
我正在使用 IIS7.5 强制我的 Web 应用程序自动加载 (startMode="AlwaysRunning"),现在我想预加载我的缓存数据。不过我有点困惑,因为两种方法看起来是一样的: 在 gl
我无法使用 获取 Application_Start 中的当前物理路径 HttpContext.Current.Request.PhysicalApplicationPath 因为当时没有Reques
我不明白为什么在我的 ASP.NET 应用程序启动时 Application_Start 事件会被调用两三次? Application_End 不在 Application_Start 调用之间调用。
在我们的 Application_Start事件处理程序我们正在执行一些由于文件锁定问题而间歇性失败的操作。在这种情况下,我们希望将应用程序返回到“未启动”状态。 我的意思是,用户将看到一个错误页面,
问题: Application_Start 事件没有在我的包含 TCP 端点的 WCF 服务中触发。 背景: 我正在尝试从控制台应用程序访问该服务。如果服务尚未启动,则调用将失败,因为 Applica
我正在调试一个初始页面加载缓慢的 ASP.NET 2.0 应用程序。 通过添加日志记录,我发现 Application_Start事件在启动时触发两次,两个事件之间有很短的延迟。 Session_St
... Application_Start 方法是否会为下一个请求再次运行? 它是否取决于 ASP.NET 版本、托管服务器版本和/或其他上下文? 我试图确定在那里加载关键程序集是否是一件好事。例如,
我目前正在更改我们的数据库部署策略以使用 FluentMigration,并一直在阅读如何运行它。有些人建议它可以从 Application_Start 运行,我喜欢这个想法,但其他人说不,但没有具体
我有一个应用程序在我的开发工作站上运行良好,但在将应用程序部署到实时环境时失败。看来 Application_Start 没有在实时环境中被调用。 最佳答案 我可以通过删除测试服务器上网站根目录中的
我有一个 ASP.NET Web 应用程序开始显示一些非常奇怪的行为。下面是一些示例代码: // in Bar.cs public class Bar { public static Baz
我是一名优秀的程序员,十分优秀!