.net core webapi教程-使用log4net写sqlserver数据库日志
深山老妖浏览:7072023-12-01 17:16:53本文累计收益:0我也要赚钱

net 6中使用log4net必须添加log4net、Microsoft.Extensions.Logging.Log4Net.AspNetCore两个引用。

使用之前必须在项目中添加log4net的配置文件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
<?xml version="1.0" encoding="utf-8"?>
<log4net>
 
    <!--SqlServer形式-->
    <!--log4net日志配置:http://logging.apache.org/log4net/release/config-examples.html -->
    <appender name="AdoNetAppender_SqlServer" 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=LogManager;Persist Security Info=True;User ID=sa;Password=t145879" />
        <commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
        <parameter>
            <parameterName value="@log_date" />
            <dbType value="DateTime" />
            <layout type="log4net.Layout.RawTimeStampLayout" />
        </parameter>
        <parameter>
            <parameterName value="@thread" />
            <dbType value="String" />
            <size value="255" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%thread" />
            </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="@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>
    </appender>
 
    <root>
        <!--控制级别,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
        <!--OFF:0-->
        <!--FATAL:FATAL-->
        <!--ERROR: ERROR,FATAL-->
        <!--WARN: WARN,ERROR,FATAL-->
        <!--INFO: INFO,WARN,ERROR,FATAL-->
        <!--DEBUG: INFO,WARN,ERROR,FATAL-->
        <!--ALL: DEBUG,INFO,WARN,ERROR,FATAL-->
        <priority value="ALL"/>
        <level value="INFO"/>
        <appender-ref ref="AdoNetAppender_SqlServer" />
    </root>
</log4net>

然后在Program.cs文件中进行注册,注册代码如下:

1
2
3
4
5
6
7
8
var builder = WebApplication.CreateBuilder(args);
#region log4net
{
    //引用log4net
    //引用Microsoft.Extensions.Logging.Log4Net.AspNetCore
    builder.Logging.AddLog4Net("CfgFile/Log4Net.Config");
}
#endregion

注册完成后在程序里面就可以使用了,使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class FirstController : Controller
    {
        private readonly ILogger<FirstController> _Logger;
        private readonly ILoggerFactory _LoggerFactory;
        public FirstController(ILogger<FirstController> logger,ILoggerFactory loggerFactory) {
            this._Logger = logger;
            this._Logger.LogInformation($"{this.GetType().Name}被构造了log1");
            this._LoggerFactory = loggerFactory;
            ILogger<FirstController> _Logger2 =
            this._LoggerFactory.CreateLogger<FirstController>();
            _Logger2.LogInformation($"{this.GetType().Name}被构造了log2");
        }
        public IActionResult Index()
        {
            ILogger<FirstController> _Logger3 =
            this._LoggerFactory.CreateLogger<FirstController>();
            _Logger3.LogInformation($"index被执行了");
 
            this._Logger.LogInformation($"index被执行了");
            return View();
        }
    }

 

评论列表
发表评论
+ 关注