这是我的问题的后续问题:灵活的日志记录界面......
我现在想为我的WinForms 2.0应用程序为多行TextBox编写一个自定义log4net appender.其中一个StackOverflow成员devdigital已经向我指出了这个链接:
但是,本文没有介绍如何通过Xml文件配置这样的appender.配置此appender的唯一问题是我们需要将对TextBox对象的引用传递给此appender.
那么可以使用Xml文件配置它吗?或者只能以编程方式配置这些appender?有哪些选项使其可配置或松散耦合,可能使用Xml文件和代码的组合?
谢谢.
我正在使用log4net来进行日志记录.我希望它同时写入文件和事件日志.
出于某种原因,我在日志文件中找到了两次消息.
这是我的app.config-section:
<log4net>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="EventLogAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="c:\temp\DIS-logfile.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="Indigo.DataIntakeService" value="eventlog" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我有以下内容:
private static readonly ILog Log = log4net.LogManager.GetLogger("DataIntakeService");
private static …Run Code Online (Sandbox Code Playgroud) 以下配置没有任何反应.
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) 我使用Microsoft的Web Deploy Remote Agent服务,允许我从Visual Studio中轻松地将代码发布到服务器.
我正在部署的网站使用log4net将消息记录到日志文件,每次我尝试部署新版本的代码时,我在Visual Studio中收到此错误,指出当前的log4net日志文件正在使用中:
在远程计算机上处理请求时发生错误.文件'Web.log'正在使用中.
该进程无法访问"C:\ inetpub\wwwroot\Logs\Web.log",因为它正由另一个进程使用.
我可以通过进入服务器并iisreset在发布之前进行解决来解决这个问题...但这有点打败了从Visual Studio中"轻松"发布的观点:)
有没有什么方法可以让发布任务自动发出iisreset,或者其他方式我可以解决这个问题?
在Log4Net配置示例网页上,它显示了如何设置SmtpAppender的示例.
所以我将以下设置添加到我的app.config文件中,并在记录警告或更高时成功发送电子邮件(这很好).
<appender name="EmailAppender" type="log4net.Appender.SmtpAppender">
<to value="me@mycompany.com" />
<from value="me@mycompany.com" />
<subject value="test logging message" />
<smtpHost value="smtpserver.mycompany.com" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
Run Code Online (Sandbox Code Playgroud)
但是From值是用我的电子邮件地址硬编码的.
我的应用程序是一个WinForms应用程序,它将部署到用户PC,因此知道哪个用户遇到警告/错误会非常方便.
是否可以设置Log4Net SmtpAppender以使From值使用当前用户的电子邮件地址?
谢谢您的帮助.
我在某些时候有一连串的日志消息,所以我不得不BufferingForwardingAppender出于性能原因.但是,除了这种爆发(发生这种情况,一天一次),在剩下的一天中,我会收到少量的日志消息.问题是缓冲区大小设置为50,这对于突发时段是可以的,但对于没有突发的时段来说这太过分了.在此期间,刷新日志可能需要一两个多小时,这在此系统中是不可接受的.
有没有办法BufferingForwardingAppender在特定的时间间隔(例如每10分钟)进行刷新,如果缓冲区中没有足够的消息来触发通常的进程?
有没有办法从日志中过滤出INFO,只显示DEBUG&ERROR,使用web.config中的配置?
<root>
<level value="DEBUG" />
<appender-ref ref="ColoredConsoleAppender" />
<appender-ref ref="RollingFileSystemAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
Run Code Online (Sandbox Code Playgroud) log4net log4net-configuration log4net-filter log4net-appender
问题解决了 - 我用正确的代码编辑这篇文章.
我正在尝试编写"main"函数,初始化log4net记录器+自定义appender附件并发送消息认为它 - 这是我的尝试(没有成功,不幸)
我的初始化有什么问题(下面的Form1.cs)?
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
ILog log = LogManager.GetLogger(typeof(Form1));
public Form1()
{
log4net.Config.XmlConfigurator.Configure();
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
log.Info("Creating log");
}
}
Run Code Online (Sandbox Code Playgroud)
错误消息-Exception = {"无法加载文件或程序集'MessageBoxAppender'或其依赖项之一.系统找不到指定的文件.":"MessageBoxAppender"} [IMG] http://i57.tinypic.com/qrjcjc .PNG [/ IMG]
我尝试使用此自定义appender代码从下面的链接编写日志消息
http://www.alteridem.net/2008/01/10/writing-an-appender-for-log4net/
我的目标是单击一个按钮,日志消息将写入自定义appender.
我有3个文件/类.
1.Form1.cs windows窗体 - 只包含一个应该写一条消息并初始化的按钮.
2."MessageBoxAppender.cs" - 从"AppenderSkeleton"继承的自定义附加内容
3.app.config - 用于log4net配置
的app.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="MessageBoxAppender"
type="WindowsFormsApplication1.MessageBoxAppender, WindowsFormsApplication1">
<layout type="log4net.Layout.PatternLayout"> …Run Code Online (Sandbox Code Playgroud) 我使用log4net进行日志记录,我有两个appender一个文件和其他eventlog appender.我已在注册表编辑器中注册应用程序,问题是现在两个记录器都在事件查看器中编写.我需要fileAppender写入文件并eventLogAppender在事件查看器中显示.
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="file.log"/>
<appendToFile value="false"/>
<layout type="log4net.Layout.PatternLayout">
<header value="Logging Start 
"/>
<footer value="Logging End 
"/>
<conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/>
</layout>
</appender>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<param name="ApplicationName" value="eventlog" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="LogFileAppender"/>
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
Run Code Online (Sandbox Code Playgroud)
然后在代码中
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
// private static readonly ILog log = LogManager.GetLogger("LogFileAppender");
private static readonly …Run Code Online (Sandbox Code Playgroud) 我正在尝试将我从应用程序收到的任何日志保存到我的数据库中的日志表中,到目前为止,没有任何东西得到保存.我正在使用Log4net和AdoNetAppender将日志保存到SQL Server中的表中.此代码位于我的应用程序服务器端的Web API项目中.
我按如下方式设置日志:
1)在我的Web.Config中设置XML:
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=token" />
<connectionString value="data source=db;Initial Catalog=dbname;Trusted_Connection=True;" providerName="System.Data.SqlClient" />
<commandText value="dbo.procLogs_Insert" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="@log_timestamp" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@log_recordNum" />
<dbType value="Int32" />
<size value="32" />
<layout type="log4net.Layout.RawPropertyLayout" />
</parameter>
<parameter>
<parameterName value="@log_computerName" />
<dbType value="String" />
<size value="128" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%X{machine}" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_processTimeStamp" />
<dbType value="DateTime" /> …Run Code Online (Sandbox Code Playgroud) log4net-appender ×10
log4net ×8
c# ×6
.net ×1
asp.net-mvc ×1
sql-server ×1
webdeploy ×1
xml ×1