首页 > 数据库 >webapi 中 使用log4net 日志记录到数据库中

webapi 中 使用log4net 日志记录到数据库中

时间:2024-06-03 17:21:16浏览次数:28  
标签:webapi log4net String GetType 接口 public 日志 logger

1. 安装三个nuget包

 

 2. 创建 log4net.config 文件 ,选中 文件鼠标右键,选择属性->复制到输出目录 修改为 始终复制

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
    <!-- Debug日志 -->
    <appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender" >
        <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
        <file value="logs\\" />
        <!-- 日志文件的命名规则 -->
        <datePattern value="yyyy-MM-dd/'Debug.log'"/>
        <!-- 将日志信息追加到已有的日志文件中-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="100" />
        <maximumFileSize value="3MB" />
        <!-- 指定按日期切分日志文件 -->
        <rollingStyle value="Date"/>
        <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
        <staticLogFileName value="false" />
        <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%newline【日志时间】: %d  【线程ID】: %thread    %newline【日志级别】: %-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Debug" />
            <param name="LevelMax" value="Debug" />
        </filter>
    </appender>

    <!-- Info日志 -->
    <appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender" >
        <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
        <file value="logs\\" />
        <!-- 日志文件的命名规则 -->
        <datePattern value="yyyy-MM-dd/'Info.log'"/>
        <!-- 将日志信息追加到已有的日志文件中-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="100" />
        <maximumFileSize value="3MB" />
        <!-- 指定按日期切分日志文件 -->
        <rollingStyle value="Date"/>
        <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
        <staticLogFileName value="false" />
        <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Info" />
            <param name="LevelMax" value="Info" />
        </filter>
    </appender>

    <!-- WARN日志 -->
    <appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender" >
        <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
        <file value="logs\\" />
        <!-- 日志文件的命名规则 -->
        <datePattern value="yyyy-MM-dd/'Warn.log'"/>
        <!-- 将日志信息追加到已有的日志文件中-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="100" />
        <maximumFileSize value="3MB" />
        <!-- 指定按日期切分日志文件 -->
        <rollingStyle value="Date"/>
        <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
        <staticLogFileName value="false" />
        <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Warn" />
            <param name="LevelMax" value="Warn" />
        </filter>
    </appender>

    <!-- Error日志 -->
    <appender name="RollingFileError" type="log4net.Appender.RollingFileAppender" >
        <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
        <file value="logs\\" />
        <!-- 日志文件的命名规则 -->
        <datePattern value="yyyy-MM-dd/'Error.log'"/>
        <!-- 将日志信息追加到已有的日志文件中-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="100" />
        <maximumFileSize value="3MB" />
        <!-- 指定按日期切分日志文件 -->
        <rollingStyle value="Date"/>
        <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
        <staticLogFileName value="false" />
        <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m %newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Error" />
            <param name="LevelMax" value="Error" />
        </filter>

    </appender>

    <!-- Fatal日志 -->
    <appender name="RollingFileFatal" type="log4net.Appender.RollingFileAppender" >
        <!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
        <file value="logs\\" />
        <!-- 日志文件的命名规则 -->
        <datePattern value="yyyy-MM-dd/'Fatal.log'"/>
        <!-- 将日志信息追加到已有的日志文件中-->
        <appendToFile value="true" />
        <rollingStyle value="Size" />
        <maxSizeRollBackups value="100" />
        <maximumFileSize value="3MB" />
        <!-- 指定按日期切分日志文件 -->
        <rollingStyle value="Date"/>
        <!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
        <staticLogFileName value="false" />
        <!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%newline%newline【日志时间】:%d  【线程ID】:%thread    %newline【日志级别】:%-5p  %newline【日志对象】:%logger  %newline【日志内容】:%m%newline" />
        </layout>
        <filter type="log4net.Filter.LevelRangeFilter">
            <param name="LevelMin" value="Fatal" />
            <param name="LevelMax" value="Fatal" />
        </filter>
    </appender>

    <!--数据库配置-->
    <appender name="logAppender_SqlServer" type="log4net.Appender.ADONetAppender">
        <bufferSize value="0"/>
        <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
        <!--链接数据库配置-->
        <connectionString value="Data Source=.;Initial Catalog=WebApiOne;User ID=sa;Password=123456;"/>
        <commandText value="INSERT INTO LogData ([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="50"/>
            <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="200"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@message"/>
            <dbType value="String"/>
            <size value="2000"/>
            <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 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 如果没有定义LEVEL的值,则缺省为DEBUG-->
        <appender-ref ref="RollingFileDebug" />
        <appender-ref ref="RollingFileInfo" />
        <appender-ref ref="RollingFileWarn" />
        <appender-ref ref="RollingFileError" />
        <appender-ref ref="RollingFileFatal" />
        <appender-ref ref="logAppender_SqlServer" />
        <level value="DEBUG" />

    </root>

</log4net>

3. 在 Program.cs 中添加如下配置

//log4net
builder.Logging.AddLog4Net("CfgFile/log4net.config");
log4net.Config.XmlConfigurator.Configure();

4. 在 WebApiOne 数据库中创建 LogData 表, 并添加下面的几个字段,数据类型依次是: 第一个是datatime,后面都是string

Date,Thread,Level,Logger,Message,Exception 


5. 使用 

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

namespace WEBAPI.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class LoginController : ControllerBase
    {
        private readonly ILogger<LoginController> _logger;
        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="logger"></param>
        public LoginController(ILogger<LoginController> logger)
        {
            _logger = logger;
            _logger.LogInformation($"{this.GetType()},info,接口访问Info");
            _logger.LogDebug($"{this.GetType()},debugger,接口访问Debugger");
            _logger.LogWarning($"{this.GetType()},warning,接口访Warning");
            _logger.LogError($"{this.GetType()},error,接口访问Error");
        }

        [HttpPost]
        public string Login()
        {
            return "sssssssss";
        }
    }
}

6. 查看: 

 

 



标签:webapi,log4net,String,GetType,接口,public,日志,logger
From: https://www.cnblogs.com/tlfe/p/18229259

相关文章

  • C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证
    C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证 参考了:https://www.cnblogs.com/-dawn/p/8598566.html GetLog4netInstance:usinglog4net;usinglog4net.Appender;usinglog4net.Config;usinglog4net.Core;usinglog4net.Filter;usinglog4net.L......
  • log4net 在webapi中的简单使用
    1.安装两个nuget包:  2.创建log4net.config配置文件,并选中log4net文件点击鼠标右键选择属性将"复制到输出目录"改为"始终复制"<?xmlversion="1.0"encoding="utf-8"?><log4net><!--Definesomeoutputappenders--><appendername......
  • Spring Boot使用GraalVM编译为native excutable app的日志示例及主要步骤说明
    日志示例[INFO]---native-maven-plugin:0.9.28:compile(default-cli)@my-app---[INFO]FoundGraalVMinstallationfromGRAALVM_HOMEvariable.[INFO][graalvmreachabilitymetadatarepositoryforch.qos.logback:logback-classic:1.4.14]:Configurationdirector......
  • MySQL从入门到高级 --- 12.事务 && 13.锁机制 && 14.日志
    文章目录第十二章&&第十三章&&第十四章:12.事务12.1特性12.2隔离级别13.锁机制13.1各存储引擎对锁的支持状况:13.2锁特性13.3MyISAM表锁13.3.1加表锁13.4InnoDB行锁13.4.1行锁特点13.4.2行锁模式14.日志14.1错误日志14.2二进制日志14.2.1日志格式14.3......
  • awk统计访问nginx日志次数
    ###查询nginx日志的访问IP次数[root@localhostnginx]#awk'{a[$3]++}END{for(vina)printv,a[v]}'access.log|grep192.168.1.33192.168.1.3338018[root@localhostnginx]####查询nginx的状态码次数,统计192.168.1.33、192.168.1.10访问日志里面的状态码次数[root@loca......
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用后端框架
    1.项目介绍该项目是基于.net8开发的Asp.NetCoreWebApi后端服务,集成了Efcore,Autofac,Jwt,AutoMapper,Serilog,Quartz,MiniExcel等组件。该框架简单易上手,没有额外的学习成本;该项目采用了多层结构设计,有利于解耦,包含公共层,领域层,协约层,应用层,ORM层,Api层; #2.项目......
  • log4net info 方法 根据不同业务创建不同的文件名
    log4netinfo方法根据不同业务创建不同的文件名 <configuration><!--...其他配置...--><configSections><sectionname="log4net"type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/></con......
  • ELK日志定期清理 ES索引数据
    ELK清理ES索引数据 这个是清理前十天的索引信息,只保留十天的索引日志 目前我是手动执行的脚本、如有需要可以自行添加定时任务#!/bin/bash#sticsearch的基本信息ES_HOST="127.0.0.1"ES_PORT="9200"ES_USER="elastic"ES_PASS="slastic"#获取当前日期......
  • 项目中日志采集实践:技术、工具与最佳实践
    ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ ......
  • webapi 配置接口注释显示
    1.再Program.cs文件中添加builder.Services.AddSwaggerGen(options=>{//读取根据api生成的控制器xml文件varfile=Path.Combine(AppContext.BaseDirectory,"WebApplication1.Webapi.xml");//显示控制器层注释options.IncludeXmlComments(file,true)......