这是我的web.config信息:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
</root>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\temp\log-file.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
</log4net>
...
Run Code Online (Sandbox Code Playgroud)
这是初始化记录器的代码:
protected void SendMessage()
{
log4net.Config.XmlConfigurator.Configure();
ILog log = LogManager.GetLogger(typeof(Contact));
...
log.Info("here we go!");
log.Debug("debug afasf");
...
}
Run Code Online (Sandbox Code Playgroud)
无论我做什么,它都不起作用.我正确地引用了'log4net.dll',通过调试应用程序,我可以看到日志对象正在正常启动.这是一个asp.net 3.5框架Web项目.有什么想法/建议吗?
我原本认为这个错误可能是由于文件写入权限约束,但似乎并非如此(或者我认为).
我正在使用vs2010,我需要记录一个多线程应用程序.所以我决定使用log4net,但由于我不习惯使用它,因此Intellisense值得.
我从http://csharptest.net/downloads/schema/log4net.xsd下载.xsd 并将其放在VSFolder/Xml/Schemas中.但是,我怎么能对我的log4net.config说使用XSD Schema?
intellisense log4net visual-studio-2010 log4net-configuration
我们使用log4net和自定义appender来记录我们从azure机器到table store的东西,这很好用.我们现在需要的是使用blob-store在一个地方配置我们所有实例的日志记录,并且能够在运行时修改它,只需修改blob存储中的配置文件,不久之后我的所有机器都应该知道这个更改.
简单地说我需要的是:
XmlConfigurator.Configure(Uri blobStoreUri, bool watch=true)
Run Code Online (Sandbox Code Playgroud)
甚至更好:
XmlConfigurator.ConfigureAndWatch(string blobStoreUrl, TimeSpan refreshInterval)
Run Code Online (Sandbox Code Playgroud)
我用Google搜索,但却找不到那样的东西.实现这个的最佳方法是什么,或者你知道任何类似的实现吗?
谢谢almir
我有一个用于测试ASP.NET MVC项目的Visual Studio单元测试项目.
将程序集级别log4net.Config.XmlConfigurator属性添加到AssemblyInfo.cs不起作用,SO上的其他人发现他们必须使用直接调用log4net.Config.XmlConfigurator.Configure();
问题是,如何才能对单元测试进行此操作?Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize在类方法上使用属性的答案不起作用.
对我来说,这段代码导致InvalidOperationException输出窗口登录,测试会话提前爆炸.
[TestClass]
public sealed class Startup
{
[AssemblyInitialize]
public void Configure()
{
System.Diagnostics.Debug.Write("Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize");
}
}
Run Code Online (Sandbox Code Playgroud)
阅读文档,MSDN表示不要AssemblyInitialize在ASP.NET的测试项目中使用,因为它们可能不止一次被调用.
那么如何才能在运行任何测试之前配置log4net?
c# asp.net-mvc unit-testing log4net-configuration visual-studio-2012
我在我的log4net配置中为我的应用程序设置了一个logfileAppender和一个consoleAppender.我希望logfile appender只写上面的ERROR消息和控制台appender来编写DEBUG及以上版本.
我的配置是:
<log4net debug="false">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<threshold value="ERROR"/>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %m%n" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
我发现ERROR和DEBUG都输出到我的logfile appender.如何将其限制为仅ERROR?
这是我的app.config中的appender配置.这只是打印出文字字符串而不是将其翻译成日期(即,字面上打印"[START:%date {MM/dd/yy HH:mm}]").
<appender name="RollingLogFileAppender"
type="log4net.Appender.RollingFileAppender">
<file value="C:\somelog" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="-yyyy-MM-dd'.txt'" />
<layout type="log4net.Layout.PatternLayout">
<header value="[START: %date{MM/dd/yy HH:mm} ] " />
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
<footer value="[END] " />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
如何在标题中打印日期/时间?
我在App.cs文件的第一行代码(创建一个只读变量)上收到错误.我得到的错误是:
PresentationFramework.dll中出现类型'System.TypeInitializationException'的第一次机会异常PresentationFramework.dll中出现未处理的类型'System.TypeInitializationException'异常附加信息:'System.Windows.Application'的类型初始化程序引发了异常.
这是我在VS中获得的消息弹出窗口:
PresentationFramework.dll中出现未处理的"System.TypeInitializationException"类型异常
附加信息:'System.Windows.Application'的类型初始化程序引发了异常.
我所做的唯一改变是将此添加到我的app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1"/>
</startup>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud) 我想将日志功能实现到类库中,类库本身在web服务中引用.我尝试添加app.config并完成所需的一切,但似乎抛出异常时,log4net什么都不做.
我的app.config
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\\mylogfile.txt" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="test" />
</filter>
<filter type="log4net.Filter.StringMatchFilter">
<stringToMatch value="error" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline%exception" />
</layout>
</appender>
<root>
<level value="INFO"/>
<appender-ref ref="RollingFileAppender"/>
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
在AssemblyInfo.cs中:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config")]
Run Code Online (Sandbox Code Playgroud)
在LogManager.cs中:
private static readonly ILog Log = log4net.LogManager.GetLogger …Run Code Online (Sandbox Code Playgroud) 我已经使用RollingLogFileAppender和SmtpAppender配置了log4net,目的是将DEBUG级别记录到RollingLogFileAppender,并将FATAL记录到SmtpAppender:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="test@test.com" />
<from value="test@test.com" />
<subject value="Fatal Error" />
<smtpHost value="smtp.test.com" />
<SMTPPort value="366"/>
<Username value="test@test.com"/>
<Password value="password"/>
<bufferSize value="1" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="FATAL"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="SmtpAppender" />
</root>
Run Code Online (Sandbox Code Playgroud)
这完全有效,直到我增加bufferSize.当我这样做时,所有级别都通过电子邮件发送,log4net.Core.LevelEvaluator似乎被忽略.我也尝试过使用LevelRangeFilter和LevelMatchFilter但是这些配置似乎根本没有收到任何电子邮件.
以下配置没有任何反应.
App.config中
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<log4net>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
Run Code Online (Sandbox Code Playgroud)
Form1.cs(示例)
public partial class Form1 : Form
{
private static readonly ILog log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public Form1()
{
InitializeComponent();
log.Fatal("Test!");
}
}
Run Code Online (Sandbox Code Playgroud) log4net ×9
c# ×4
.net ×1
asp.net ×1
asp.net-mvc ×1
azure ×1
intellisense ×1
logging ×1
unit-testing ×1