大致分为3个步骤
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" alt="" />
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" alt="" />
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" alt="" />
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> <!-- 开启内部调试 比如, 配置好了日志记录到数据库(Mysql、Oracle、Sql Server)等, 但就是记录不上, 又找不到原因时, 可以查看这个log排查原因 --> <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> <!-- 按照日期分割日志文件 1小时1个 --> <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender"> <!-- 是否续写 --> <param name="AppendToFile" value="true" /> <!--最小锁定模型以允许多个进程可以写入同一个文件 在使用RollingFileAppender的方式不支持多进程同時写一個日志文件; 使用FileAppender才可以 --> <!--<param name="LockingModel" value="log4net.Appender.FileAppender+MinimalLock" />--> <!--<param name="StaticLogFileName" 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="
---- Start --------------------------------------------
" /> <param name="Footer" value="
---- End --------------------------------------------
" /> <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> <!-- 按照日志容量分割文件 10KB 1个 --> <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender"> <!--是否续写--> <param name="AppendToFile" value="true" /> <!--最小锁定模型以允许多个进程可以写入同一个文件 在使用RollingFileAppender的方式不支持多进程同時写一個日志文件; 使用FileAppender才可以 --> <!--<param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" />--> <!--按照文件的大小进行变换日志文件--> <param name="RollingStyle" value="Size" /> <!--生成 log.txt, log.txt.1, log.txt.2--> <param name="File" value="Log/log.txt" /> <!--单个文件最大数量 好像只有在 按Size分割时有效--> <param name="MaximumFileSize" value="15KB"/> <!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效--> <param name="MaxSizeRollBackups" value="3" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="
---- Start --------------------------------------------
" /> <param name="Footer" value="
---- End --------------------------------------------
" /> <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" /> <!-- 切割最多文件数 -1表示不限制产生日志文件数--> <param name="MaxSizeRollBackups" value="-1"/> <!-- 每个文件的大小限制 --> <param name="MaximumFileSize" value="10KB"/> <!-- RollingStyle Composite 综合 Size 按大小 Date 按时间 --> <param name="RollingStyle" value="Composite" /> <!--如果要在这个文件名后面加上.log后缀,必须使用转义字符--> <!--<param name="DatePattern" value=""Logs_"yyyyMMdd".txt"" />--> <param name="DatePattern" value="yyyyMMdd-HH.mm".log"" /> <param name="StaticLogFileName" value="false" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="
---- Start --------------------------------------------
" /> <param name="Footer" value="
---- End --------------------------------------------
" /> <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> <!--输出到SQL Server--> <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> <!-- 配置日志的级别,低于此级别的就不写到日志里面去 OFF、FATAL、ERROR, WARN, INFO, DEBUG, ALL --> <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(); } }
查看运行结果: