一、     前言

该文章是针对在Log4Net中添加自定义日志信息。我们在写日志的时候并不是只写消息(Message,有些情况需要记录自定义的日志信息等。下面将说明在Log4Net中增加自定义字段UserName(用户名),Category(类别)这两个字段。

二、     建立数据库

Log4Net添加自定义日志信息 [转帖]CREATE TABLE [dbo].[Log] (
Log4Net添加自定义日志信息 [转帖]    
[Id] [int] IDENTITY (11NOT NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Date] [datetime] NOT NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Thread] [varchar] (255NOT NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Level] [varchar] (50NOT NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Logger] [varchar] (255NOT NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Message] [varchar] (4000NOT NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Exception] [varchar] (2000NULL ,
Log4Net添加自定义日志信息 [转帖]    
[User] [varchar] (50NULL ,
Log4Net添加自定义日志信息 [转帖]    
[Category] [varchar] (50)  NULL 
Log4Net添加自定义日志信息 [转帖]
 

其中Date,Thread,Level,Logger,Message,Exceptionlog4net内置的信息。UserCategory是自定义的字段。

三、     编写配置文件

Log4Net添加自定义日志信息 [转帖]<configuration>
Log4Net添加自定义日志信息 [转帖]    
<configSections>
Log4Net添加自定义日志信息 [转帖]        
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
Log4Net添加自定义日志信息 [转帖]    
</configSections>
Log4Net添加自定义日志信息 [转帖]    
<log4net>
Log4Net添加自定义日志信息 [转帖]        
<logger name="AA">
Log4Net添加自定义日志信息 [转帖]            
<level value="All" />
Log4Net添加自定义日志信息 [转帖]            
<appender-ref ref="ADONetAppender" />
Log4Net添加自定义日志信息 [转帖]        
</logger>
Log4Net添加自定义日志信息 [转帖]    
<!--<root>
Log4Net添加自定义日志信息 [转帖]            <level value="All" />
Log4Net添加自定义日志信息 [转帖]      <appender-ref ref="ADONetAppender" /> 
Log4Net添加自定义日志信息 [转帖]        </root>
-->
Log4Net添加自定义日志信息 [转帖]        
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
Log4Net添加自定义日志信息 [转帖]            
<!--BufferSize为缓冲区大小-->
Log4Net添加自定义日志信息 [转帖]            
<param name="BufferSize" value="1" />
Log4Net添加自定义日志信息 [转帖]      
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
Log4Net添加自定义日志信息 [转帖]      
<connectionString value="database=aa;server=(local);User ID=sa;Password=;" />
Log4Net添加自定义日志信息 [转帖]      
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception],[User],[Category]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@User,@Category)" />
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@log_date" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="DateTime" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="log4net.Layout.RawTimeStampLayout" />
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@thread" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="255" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="log4net.Layout.PatternLayout">
Log4Net添加自定义日志信息 [转帖]          
<conversionPattern value="%thread" />
Log4Net添加自定义日志信息 [转帖]        
</layout>
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@log_level" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="50" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="log4net.Layout.PatternLayout">
Log4Net添加自定义日志信息 [转帖]          
<conversionPattern value="%level" />
Log4Net添加自定义日志信息 [转帖]        
</layout>
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@logger" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="255" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="log4net.Layout.PatternLayout">
Log4Net添加自定义日志信息 [转帖]          
<conversionPattern value="%logger" />
Log4Net添加自定义日志信息 [转帖]        
</layout>
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@message" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="4000" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="log4net.Layout.PatternLayout">
Log4Net添加自定义日志信息 [转帖]          
<conversionPattern value="%message" />
Log4Net添加自定义日志信息 [转帖]        
</layout>
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@exception" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="2000" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="log4net.Layout.ExceptionLayout" />
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@User" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="50" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="Log4NetToDatabase.CustomLayout">
Log4Net添加自定义日志信息 [转帖]          
<conversionPattern value="%UserName" />
Log4Net添加自定义日志信息 [转帖]        
</layout>
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]      
<parameter>
Log4Net添加自定义日志信息 [转帖]        
<parameterName value="@Category" />
Log4Net添加自定义日志信息 [转帖]        
<dbType value="String" />
Log4Net添加自定义日志信息 [转帖]        
<size value="50" />
Log4Net添加自定义日志信息 [转帖]        
<layout type="Log4NetToDatabase.CustomLayout">
Log4Net添加自定义日志信息 [转帖]          
<conversionPattern value="%Category" />
Log4Net添加自定义日志信息 [转帖]        
</layout>
Log4Net添加自定义日志信息 [转帖]      
</parameter>
Log4Net添加自定义日志信息 [转帖]    
</appender>
Log4Net添加自定义日志信息 [转帖]  
</log4net>
Log4Net添加自定义日志信息 [转帖]
</configuration>

配置文件说明:该配置文件在应用程序项目中的App.config配置文件中编写。配置文件中的Log4NetToDatabase.CustomLayout为自定义类的名称,具体实现请关注编写代码。配置文件中如果将<root>节点的注释打开则会产生两条同样的信息,因为在<root>节点中有一个appender-ref子节点,它也引用了ADONetAppender附着器。由于<logger>节点已经引用了ADONetAppender附着器,并且加载它。我个人怀疑<root>节点的内容为自动加载,所以会连续产生两条同样的信息。解决该问题只要将<Root>节点注释,或将<root>节点中的<appender-ref>子节点注释就解决了。

 

一、     编写代码

1.     编写自定义PatternLayoutConverter

Log4Net添加自定义日志信息 [转帖]internal sealed class UserNamePatternConverter : PatternLayoutConverter 

2.     编写自定义日志输出类

Log4Net添加自定义日志信息 [转帖]public class LogMessage
    }

3.     编写由log4net.Layout.LayoutSkeleton继承的类CustomLayout

由于内容过多,将在附件中给出源代码。

在此对该类做一些说明:

如果要添加自定义的字段,可以在静态构造函数static CustomLayout()中加入s_globalRulesRegistry.Add("UserName", typeof(UserNamePatternConverter));其中UserNamePatternConverter是继承于PatternLayoutConverter的类。注册完之后就可以在配置文件中使用%UserName使用了。在此只要做这些修改就能使用了,其它的代码如果有趣,可以一起交流。

4.     加载配置文件并记录日志

AssemblyInfo.cs文件中添加[assembly: XmlConfigurator()]。它的作用同于log4net.Config.XmlConfigurator.Configure();用来读取配置文件信息。

log4net.ILog log;

form1中添加下列代码:

Log4Net添加自定义日志信息 [转帖]private static int count = 0;
Log4Net添加自定义日志信息 [转帖]        
public Form1()
        }


解决方案二:

与上面的方案只需做以下的更改:将CustomLayout类继承自log4net.Layout.PatternLayout并在构造函数中调用AddConverter()方法。该方法将占用较多的系统内存,但它代码简单易于理解。它的代码如下:

 

Log4Net添加自定义日志信息 [转帖]public class CustomLayout : log4net.Layout.PatternLayout
}
源代码下载:Log4NetToDatabase 下载
参考信息:

Log4Net使用指南:http://www.tongyi.net/develop/.net/1053472.html

log4net 文章集http://myx.cnblogs.com/archive/2005/06/28/182617.html

转自:http://www.cnblogs.com/xds/archive/2007/03/06/665124.html

相关文章:

  • 2021-11-27
  • 2023-03-20
  • 2022-12-23
  • 2022-12-23
  • 2021-08-28
  • 2022-01-12
猜你喜欢
  • 2022-12-23
  • 2021-11-07
  • 2022-12-23
  • 2021-10-16
  • 2021-12-18
  • 2022-12-23
  • 2021-09-25
相关资源
相似解决方案