大致分为3个步骤
CREATE TABLE [dbo].[Log]( [Id] [int] IDENTITY(1,1) NOT NULL, [AppDomain] [nvarchar](255) NULL, [Logger] [nvarchar](255) NOT NULL, [Level] [nvarchar](50) NOT NULL, [Thread] [nvarchar](255) NOT NULL, [File] [nvarchar](500) NULL, [Line] [nvarchar](50) NULL, [Identity] [nvarchar](50) NULL, [UserName] [nvarchar](50) NULL, [Date] [datetime] NOT NULL, [RunTime] [int] NULL, [Message] [nvarchar](4000) NULL, [Exception] [text] NULL, CONSTRAINT [PK_Log] PRIMARY KEY CLUSTERED ( [Id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO ALTER TABLE [dbo].[Log] ADD CONSTRAINT [DF_Log_Date] DEFAULT (getdate()) FOR [Date] GO
xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> configSections> <appSettings> <add key="log4net.Internal.Debug" value="true"/> appSettings> <system.diagnostics> <trace autoflush="true"> <listeners> <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="Log/log4net.Internal.Debug.log" /> listeners> trace> system.diagnostics> <log4net> <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender"> <param name="AppendToFile" value="true" /> <param name="File" value="Log/" /> <param name="DatePattern" value="yyyy-MM-dd HH.LOG" /> <param name="StaticLogFileName" value="false" /> <param name="RollingStyle" value="Date" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="&#xD;&#xA;---- Start --------------------------------------------&#xD;&#xA;" /> <param name="Footer" value="&#xD;&#xA;---- End --------------------------------------------&#xD;&#xA;" /> <param name="ConversionPattern" value="%newline AppDomain: %appdomain %newline Logger: %logger %newline Level: %level %newline ThreadId: %thread %newline File: %file %newline Line: %line %newline Identity: %identity %newline UserName: %username %newline DateTime: %date{yyyy-MM-dd HH:mm:ss.fff} %newline RunTime: %timestamp(ms) %newline Message: %message %newline Exception: %exception %newline %newline" /> layout> appender> <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender"> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Size" /> <param name="File" value="Log/log.txt" /> <param name="MaximumFileSize" value="15KB"/> <param name="MaxSizeRollBackups" value="3" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="&#xD;&#xA;---- Start --------------------------------------------&#xD;&#xA;" /> <param name="Footer" value="&#xD;&#xA;---- End --------------------------------------------&#xD;&#xA;" /> <param name="ConversionPattern" value="%newline AppDomain: %appdomain %newline Logger: %logger %newline Level: %level %newline ThreadId: %thread %newline File: %file %newline Line: %line %newline Identity: %identity %newline UserName: %username %newline DateTime: %date{yyyy-MM-dd HH:mm:ss.fff} %newline RunTime: %timestamp(ms) %newline Message: %message %newline Exception: %exception %newline %newline" /> layout> appender> <appender name="LogFileAppenderBySizeAndDate" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log/" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="-1"/> <param name="MaximumFileSize" value="10KB"/> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value="yyyyMMdd-HH.mm".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="&#xD;&#xA;---- Start --------------------------------------------&#xD;&#xA;" /> <param name="Footer" value="&#xD;&#xA;---- End --------------------------------------------&#xD;&#xA;" /> <param name="ConversionPattern" value="%newline AppDomain: %appdomain %newline Logger: %logger %newline Level: %level %newline ThreadId: %thread %newline File: %file %newline Line: %line %newline Identity: %identity %newline UserName: %username %newline DateTime: %date{yyyy-MM-dd HH:mm:ss.fff} %newline RunTime: %timestamp(ms) %newline Message: %message %newline Exception: %exception %newline %newline" /> layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ALL" /> <param name="LevelMax" value="OFF" /> filter> appender> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <bufferSize value="100" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="Data Source=.;Initial Catalog=log4netTest;User ID=sa;Password=sa" /> <commandText value="INSERT INTO [dbo].[Log] ([AppDomain] ,[Logger] ,[Level] ,[Thread] ,[File] ,[Line] ,[Identity] ,[UserName] ,[Date] ,[RunTime] ,[Message] ,[Exception]) VALUES (@appDomain ,@logger ,@log_level ,@thread ,@file ,@line ,@identity ,@userName ,@log_date ,@runtime ,@message ,@exception)" /> <parameter> <parameterName value="@appDomain" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%appdomain" /> layout> parameter> <parameter> <parameterName value="@logger" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%logger" /> layout> parameter> <parameter> <parameterName value="@log_level" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%level" /> layout> parameter> <parameter> <parameterName value="@thread" /> <dbType value="String" /> <size value="255" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%thread" /> layout> parameter> <parameter> <parameterName value="@file" /> <dbType value="String" /> <size value="500" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%file" /> layout> parameter> <parameter> <parameterName value="@line" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%line" /> layout> parameter> <parameter> <parameterName value="@identity" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%identity" /> layout> parameter> <parameter> <parameterName value="@userName" /> <dbType value="String" /> <size value="50" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%username" /> layout> parameter> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> parameter> <parameter> <parameterName value="@runtime" /> <dbType value="Int32" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%timestamp" /> layout> parameter> <parameter> <parameterName value="@message" /> <dbType value="String" /> <size value="4000" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%message" /> layout> parameter> <parameter> <parameterName value="@exception" /> <dbType value="String" /> <size value="8000" /> <layout type="log4net.Layout.ExceptionLayout" /> parameter> appender> <root> <level value="DEBUG" /> <appender-ref ref="LogFileAppenderByDate" /> <appender-ref ref="LogFileAppenderBySize" /> <appender-ref ref="LogFileAppenderBySizeAndDate" /> <appender-ref ref="AdoNetAppender" /> root> log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> startup> configuration>
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
class Program { private static readonly ILog log = LogManager.GetLogger(typeof(Program).Name); static void Main(string[] args) { for (int i = 0; i <50; i++) { try { int a = 8, b = 0, c = 0; c = a / b; } catch (Exception ex) { if (log.IsErrorEnabled) { log.Error(null, ex); } if (log.IsDebugEnabled) { log.Debug("Debug", ex); } } } Console.ReadKey(); } }
查看运行结果:
在VS2013中使用Log4net