.NET6中使用Log4net记录日志(二)记录日志到SqlServer数据库
1、引用NuGet包(System.Data.SqlClient)
2、创建SqlServer数据库表(ProgramLog)
1 2 3 4 5 6 7 8 9 10 11 | CREATE TABLE ProgramLog ( Id INT IDENTITY(1,1) PRIMARY KEY , [ Date ] DATETIME, --记录时间 [ Level ] NVARCHAR(128), --日志级别 [RunTime] VARCHAR (128), --执行时长 [Thread] NVARCHAR(256), --线程号 [Line] NVARCHAR(256), --行号 [Message] NVARCHAR( max ), --描述 [Exception] NVARCHAR(2000), --详情 [Logger] NVARCHAR(256) --类名 ); |
3、更新配置文件(log4net.config),注意:需右键,属性,复制输出目录设置为(如果较新则复制)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 | <?xml version= "1.0" encoding= "utf-8" ?> <log4net> <!--根配置--> <root> <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG --> <level value= "ERROR" /> <level value= "WARN" /> <level value= "INFO" /> <level value= "DEBUG" /> <appender- ref ref = "AdoNetAppender" /> <appender- ref ref = "ErrorLog" /> <appender- ref ref = "WarnLog" /> <appender- ref ref = "InfoLog" /> <appender- ref ref = "DebugLog" /> </root> <!--正常日志:记录正常日志--> <!-- appender 定义日志输出方式 将日志以回滚文件的形式写到数据库中。--> <appender name= "AdoNetAppender" type= "log4net.Appender.AdoNetAppender" > <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库--> <bufferSize value= "0" /> <!-- 数据库连接字符串 --> <connectionType value= "System.Data.SqlClient.SqlConnection,System.Data.SqlClient, Version=4.6.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> <connectionString value= "Data Source=.;Initial Catalog=MainAPI;User ID=sa;Password=svse;Integrated Security=True;" /> <!-- 日志表的结构 --> <commandText value= "INSERT INTO [dbo].[ProgramLog]([Level],[RunTime],[Thread],[Line],[Message],[Exception],[Logger],[Date])VALUES (@log_level,@log_runtime,@thread,@log_line,@message,@exception,@logger,@log_date)" /> <parameter> <parameterName value= "@log_level" /> <dbType value= "String" /> <size value= "50" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%level" /> </layout> </parameter> <parameter> <parameterName value= "@log_runtime" /> <dbType value= "String" /> <size value= "255" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%r" /> </layout> </parameter> <parameter> <parameterName value= "@log_line" /> <dbType value= "String" /> <size value= "255" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%L" /> </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= "@logger" /> <dbType value= "String" /> <size value= "255" /> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value= "%logger" /> </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= "2000" /> <layout type= "log4net.Layout.ExceptionLayout" /> </parameter> <parameter> <parameterName value= "@log_date" /> <dbType value= "DateTime" /> <layout type= "log4net.Layout.RawTimeStampLayout" /> </parameter> </appender> <!-- 错误 Error.log--> <appender name= "ErrorLog" type= "log4net.Appender.RollingFileAppender" > <!--目录路径,可以是相对路径或绝对路径--> <param name= "File" value= "log" /> <!--文件名,按日期生成文件夹--> <param name= "DatePattern" value= "/yyyy-MM-dd/" Error.log "" /> <!--追加到文件--> <appendToFile value= "true" /> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value= "Composite" /> <!--写到一个文件--> <staticLogFileName value= "false" /> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value= "200MB" /> <!--最多保留的文件数,设为 "-1" 则不限--> <maxSizeRollBackups value= "-1" /> <!--日志输出格式 //行号影响性能??--> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value="%n===================================================================================================== %n[日志级别]%-5level %n[记录时间]%date %n[执行时间]%r %n[线程]%t %n[文件]%F %n[行号]%L %n[类名]%logger %n[描述]%message %n[详情]%exception"/> </layout> <filter type= "log4net.Filter.LevelRangeFilter" > <param name= "LevelMin" value= "ERROR" /> <param name= "LevelMax" value= "ERROR" /> </filter> </appender> <!-- 警告 Warn.log--> <appender name= "WarnLog" type= "log4net.Appender.RollingFileAppender" > <!--目录路径,可以是相对路径或绝对路径--> <param name= "File" value= "log" /> <!--文件名,按日期生成文件夹--> <param name= "DatePattern" value= "/yyyy-MM-dd/" Warn.log "" /> <!--追加到文件--> <appendToFile value= "true" /> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value= "Composite" /> <!--写到一个文件--> <staticLogFileName value= "false" /> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value= "200MB" /> <!--最多保留的文件数,设为 "-1" 则不限--> <maxSizeRollBackups value= "-1" /> <!--日志格式--> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value="%n===================================================================================================== %n[日志级别]%-5level %n[记录时间]%date %n[执行时间]%r %n[线程]%t %n[文件]%F %n[行号]%L %n[类名]%logger %n[描述]%message %n[详情]%exception"/> </layout> <filter type= "log4net.Filter.LevelRangeFilter" > <param name= "LevelMin" value= "WARN" /> <param name= "LevelMax" value= "WARN" /> </filter> </appender> <!-- 信息 Info.log--> <appender name= "InfoLog" type= "log4net.Appender.RollingFileAppender" > <!--目录路径,可以是相对路径或绝对路径--> <param name= "File" value= "log" /> <!--文件名,按日期生成文件夹--> <param name= "DatePattern" value= "/yyyy-MM-dd/" Info.log "" /> <!--追加到文件--> <appendToFile value= "true" /> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value= "Composite" /> <!--写到一个文件--> <staticLogFileName value= "false" /> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value= "200MB" /> <!--最多保留的文件数,设为 "-1" 则不限--> <maxSizeRollBackups value= "-1" /> <!--日志格式--> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value="%n===================================================================================================== %n[日志级别]%-5level %n[记录时间]%date %n[执行时间]%r %n[线程]%t %n[文件]%F %n[行号]%L %n[类名]%logger %n[描述]%message %n[详情]%exception"/> </layout> <filter type= "log4net.Filter.LevelRangeFilter" > <param name= "LevelMin" value= "INFO" /> <param name= "LevelMax" value= "INFO" /> </filter> </appender> <!-- 调试 Debug.log--> <appender name= "DebugLog" type= "log4net.Appender.RollingFileAppender" > <!--目录路径,可以是相对路径或绝对路径--> <param name= "File" value= "log" /> <!--文件名,按日期生成文件夹--> <param name= "DatePattern" value= "/yyyy-MM-dd/" Debug.log "" /> <!--追加到文件--> <appendToFile value= "true" /> <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]--> <rollingStyle value= "Composite" /> <!--写到一个文件--> <staticLogFileName value= "false" /> <!--单个文件大小。单位:KB|MB|GB--> <maximumFileSize value= "200MB" /> <!--最多保留的文件数,设为 "-1" 则不限--> <maxSizeRollBackups value= "-1" /> <!--日志格式--> <layout type= "log4net.Layout.PatternLayout" > <conversionPattern value="%n===================================================================================================== %n[日志级别]%-5level %n[记录时间]%date %n[执行时间]%r %n[线程]%t %n[文件]%F %n[行号]%L %n[类名]%logger %n[描述]%message %n[详情]%exception"/> </layout> <filter type= "log4net.Filter.LevelRangeFilter" > <param name= "LevelMin" value= "DEBUG" /> <param name= "LevelMax" value= "DEBUG" /> </filter> </appender> </log4net> |
4、Log4net官方写入数据库文档:https://logging.apache.org/log4net/release/config-examples.html
5、程序中调用日志功能
1 2 3 4 | Log4netHelper.Info( "token 认证 成功1" ); Log4netHelper.Warning( "token 认证 成功222" ); Log4netHelper.Debug( "token 认证 成功3233" ); Log4netHelper.Error( "token 认证 成功444" ); |