log4net在.Net Core使用

article/2025/9/29 16:43:45

log4net的使用,可以把日志信息输出到各种不同终端(文本文件、数据库、windows日志等),实现过程主要是各种输出方式的配置文件怎样配置:

1.安装log4net包

如果需要输出到数据库,相应的引入包

注意:如果在.net core中使用,且在Program.cs中注册配置,则必须引入上述第二个包

2.新建配置文件log4net.config

当然配置文件的名字可以自定义,属性为“始终复制”。只需在注册时对得上就好。具体配置方式在官网上就有Apache log4net – Apache log4net: Config Examples - Apache log4net,本文最后也会贴代码描述。

3.调用log4net

(1)普通调用方式,适用在.Net Core和.Net FrameWork中所有项目 

  //创建logger,名称可以随意定义ILoggerRepository repository = LogManager.CreateRepository("logNETCoreRepository");//指定log4net的配置文件,即你的log4net的文件XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));//声明log对象,指定使用的logger和检索器名称,检索器名称对应日志模板中的logger,可以为程序集名称也可以自定义//var log = log4net.LogManager.GetLogger(repository.Name, "logNETCoreRepository1");//声明log对象,指定使用的logger和检索器名称,检索器名称对应日志模板中的logger,可以为程序集名称也可以自定义,这里为当前方法类全名+方法名var log = log4net.LogManager.GetLogger(repository.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName+"."+System.Reflection.MethodBase.GetCurrentMethod().Name);//写入日志log.Info("addlog");//写入警告信息log.Warn("Warn");

你也可以将这段整成帮助类来使用。

(2)在.Net Core MVC中可以通过依赖注入的方式使用:

首先在Program.cs的CreateHostBuilder方法中配置Log4net:

 public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureLogging(logger => logger.AddLog4Net("log4net.config"))//log4net配置文件.ConfigureAppConfiguration((hostingContext, config) =>{config.Sources.Clear();}).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup<Startup>();});

然后在控制器或者model中依赖注入ILogger:

    public class HomeController : Controller{private readonly ILogger<HomeController> _logger;private readonly MyModel _mm;private readonly IConfiguration _configuration;public HomeController(ILogger<HomeController> logger, MyModel mm, IConfiguration Configuration){_logger = logger;_mm = mm;_configuration = Configuration;_logger.LogInformation("HomeController被构造...");}public IActionResult Index(){_logger.LogInformation("Home Index 被访问...");string ret = _mm.test();string temp = _configuration["ccc"];return Content($"{temp}----{ret}");}}

(3)当然在.Net Framework中可以这么使用,在Properties的AssemblyInfo.cs中添加以下代码,指明log4net的配置文件

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

这样再需要两个步骤,一个是在log4net.config中将root节点换成logger节点

	<logger name="loginfo"><level value="ALL"/><appender-ref ref="rollingAppender" /></logger>

最后在调用时这样调用:

var log=log4net.LogManager.GetLogger("loginfo");//loginfo即为上一步中的logger name
log.Info("addlog")

4.配置信息,包括到追加文本文件,sqlite数据库,mysql数据库和windows日志中。

<?xml version="1.0" encoding="utf-8"?>
<log4net debug="true">//开启调试<!-- Define some output appenders --><appender name="rollingAppender" type="log4net.Appender.RollingFileAppender"><file value="log\log.txt" /><!--追加日志内容--><appendToFile value="true" /><!--防止多线程时不能写Log,官方说线程非安全--><lockingModel type="log4net.Appender.FileAppender+MinimalLock" /><!--可以为:Once|Size|Date|Composite--><!--Composite为Size和Date的组合--><rollingStyle value="Composite" /><!--当备份文件时,为文件名加的后缀--><datePattern value="yyyyMMdd.txt" /><!--日志最大个数,都是最新的--><!--rollingStyle节点为Size时,只能有value个日志--><!--rollingStyle节点为Composite时,每天有value个日志--><maxSizeRollBackups value="3" /><!--可用的单位:KB|MB|GB--><maximumFileSize value="2KB" /><!--置为true,当前最新日志文件名永远为file节中的名字--><staticLogFileName value="true" /><!--输出级别在INFO和ERROR之间的日志--><filter type="log4net.Filter.LevelRangeFilter"><param name="LevelMin" value="INFO" /><param name="LevelMax" value="FATAL" /></filter><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/></layout></appender><!--写入到sqlite数据库--><appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"><!--缓冲区事件的大小,设置为小于或者等于1的值,则不会发生任何缓冲,日志记录同步执行,否则事件将被缓冲--><bufferSize value="1" /><!--数据库类型--><connectionType value="System.Data.SQLite.SQLiteConnection,System.Data.SQLite" /><!--数据库地址--><connectionString value="Data Source=~/log.db;Version=3;" /><!--写入日志语句--><commandText value="INSERT INTO Log(Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" /><parameter><!--配置字段--><parameterName value="@Date" /><!--字段数据类型--><dbType value="DateTime" /><!--北京时间--><layout type="log4net.Layout.RawTimeStampLayout" /></parameter><parameter><parameterName value="@Level" /><dbType value="String" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%level" /></layout></parameter><parameter><parameterName value="@Logger" /><dbType value="String" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%logger" /></layout></parameter><parameter><parameterName value="@Message" /><dbType value="String" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%message" /></layout></parameter></appender><!--写入到mysql数据库--><appender name="MysqlAdoNetAppender" type="log4net.Appender.AdoNetAppender"><!--缓冲区事件的大小,设置为小于或者等于1的值,则不会发生任何缓冲,日志记录同步执行,否则事件将被缓冲--><bufferSize value="1" /><!--数据库类型--><connectionType value="MySql.Data.MySqlClient.MySqlConnection,MySql.Data" /><!--数据库地址--><connectionString value="server=192.168.1.188;port=3306;database=enav;uid=root;pwd=root;" /><!--写入日志语句--><commandText value="INSERT INTO lognet(`Date`, `Level`, `Logger`, `Message`) VALUES (@date, @level, @logger, @message)" /><parameter><!--配置字段--><parameterName value="@date" /><!--字段数据类型--><dbType value="DateTime" /><!--北京时间--><layout type="log4net.Layout.RawTimeStampLayout" /></parameter><parameter><parameterName value="@level" /><dbType value="String" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%level" /></layout></parameter><parameter><parameterName value="@logger" /><dbType value="String" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%logger" /></layout></parameter><parameter><parameterName value="@message" /><dbType value="String" /><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%message" /></layout></parameter></appender><!--写入到windows日志中--><appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" ><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /></layout></appender><!-- levels: OFF > FATAL > ERROR > WARN > INFO > DEBUG  > ALL --><root><priority value="ALL"/><level value="ALL"/><appender-ref ref="AdoNetAppender" /><appender-ref ref="MysqlAdoNetAppender" /><appender-ref ref="rollingAppender" /><appender-ref ref="EventLogAppender" /></root>
</log4net>

其中在使用MySql时,发现过在使用某些版本Mysql数据库的nuget包时,写入失败,一直报错,换了版本就好了,不知道是不是Mysql一些版本对Log4net的兼容。

还有重要一点,开启log4net调试就在log4net节点中添加debug="true"就好了,就可以在控制台打印log4net相关调试信息了。


http://chatgpt.dhexx.cn/article/ICXg84RC.shtml

相关文章

C#log4net的使用教程

1.我们在工具层使用NuGet添加log4net引用包 2.添加LogHelper帮助类 public class LogHelper{private static ILog _lognet LogManager.GetLogger(typeof(LogHelper));public static void WriterErrorLog(string logMessage) {_lognet.Error(logMessage);}public static void W…

C# log4net日志库的简单使用

C# log4net日志库的简单使用 一、简述 记--log4net日志开源库的简单使用&#xff1a;控制日志文件大小&#xff0c;日志文件个数&#xff0c;滚动式覆盖&#xff0c;自由控制日志打印等级 例子打包&#xff1a;外链:https://wwa.lanzoui.com/b0c9qvfqf 密码:67y7 二、下载log…

关于log4net的详细使用教程

1、下载log4net并添加引用或通过NuGet安装程序包 2、配置文件中添加配置 在配置文件web.config或App.config中的Configuration节点下增加以下配置 <configSections><section name"log4net" type"log4net.Config.Log4NetConfigurationSectionHandler, …

.Net使用log4net

1.使用Nuget下载log4net 2.、新建Config文件夹&#xff0c;将log4net配置文件放入此文件夹中&#xff08;当修改web.config的时候会重启网站&#xff0c;所以把log4net单独出来比较好&#xff0c;也好管理&#xff09;&#xff0c;log4net配置&#xff1a; <?xml version…

Log4Net 使用方法

第一步&#xff1a;安装nuget log4net包 第二步&#xff1a;新建log4net.config配置文件&#xff0c;配置日志输出格式 <?xml version"1.0"?> <configuration><configSections><section name"log4net" type"log4net.Config.L…

完整Log4Net配置信息,详细注释

<?xml version"1.0" encoding"utf-8" ?> <configuration><configSections><section name"log4net" type"log4net.Config.Log4NetConfigurationSectionHandler,log4net-net-1.0"/></configSections>&l…

Log4Net 详解

1.Log4Net环境的搭建与基本配置 (1)Log4Net框架介绍 Log4net 是 Apache 下一个开放源码的项目&#xff0c;它是Log4j 的一个克隆版。我们可以控制日志信息的输出目的地。Log4net中定义了多种日志信息输出模式。它可以根据需要将日志输出到控制台&#xff0c;文本文件&#xff…

第一节:框架前期准备篇之Log4Net日志详解

一. Log4Net简介 Log4net是从Java中的Log4j迁移过来的一个.Net版的开源日志框架&#xff0c;它的功能很强大&#xff0c;可以将日志分为不同的等级&#xff0c;以不同的格式输出到不同的存储介质中&#xff0c;比如&#xff1a;数据库、txt文件、内存缓冲区、邮件、控制台、ANS…

Log4net详细教程

Log4net详细教程 一、Log4net概述log4net主要几个方法&#xff1a; 二、配置教程1、配置文件详解2、程序配置文件3、日志帮助类的编写 一、Log4net概述 log4net 是从 java 下有卓越表现的 log4j 移植过来的&#xff0c;是一个能够将日志信息输出到各种 不同目标的.net 类库&am…

Log4Net详解

Log4Net详解 零、文章目录 一、Log4Net详解 1、功能概述 &#xff08;1&#xff09;概述 Log4net库是.Net下一个非常优秀的开源日志记录组件&#xff0c;是一个帮助程序员将日志信息输出到各种目标&#xff08;控制台、文件、数据库等&#xff09;的工具。如果应用程序出现…

C#【必备技能篇】log4net的使用

使用log4net大致分以下几步&#xff1a; 1.安装 log4net&#xff0c;通过 Nuget 下载&#xff08;或者有log4net.dll的话&#xff0c;直接引用即可&#xff09; 2.新建 log4net.config 配置文件 <?xml version"1.0" encoding"utf-8" ?> <con…

Oracle存储过程的简单举例

一、建立测试数据 --建立测试数据: create table person(编号 number(10),姓名 varchar2(20),密码 varchar2(20));insert into person values(1,xzw,888);select * from person; 查询结果如下&#xff1a; 二、建立存储过程 --建立存储过程: create or replace procedure qu…

Mysql 存储过程案例教程

关注微信公共号&#xff1a;小程在线 关注CSDN博客&#xff1a;程志伟的博客 一、无参数无返回值存储过程 DELIMITER表示自定义结束符号&#xff0c;SQL一般默认&#xff1b;为结束符号 红色部分为固定格式 下面的查询语句&#xff0c;可以改成任意复杂的SQL语句 DELIMITE…

Oracle存储过程入门教程(通俗理解存储过程)

Oracle存储过程入门通俗介绍 一、118个真实应用场景的Oracle存储过程案例及开发指南二、存储过程通俗理解三、创建存储过程基本语法(汇总)四、执行存储过程的方式&#xff08;5种&#xff09;五、网上现有的创建存储过程的两种方式解释&#xff08;看注释&#xff09;六、一些存…

MySQL存储过程示例

实例1&#xff1a; 为了演示MySQL中的存储过程&#xff0c;我们先创建一些表和数据&#xff1a; drop table if exists my_test_table; create table my_test_table (id integer primary key not null AUTO_INCREMENT,name varchar(20),age integer,point double ); insert int…

mysql 存储过程详解

前言 在项目开发中&#xff0c;经常会遇到这样一种场景&#xff0c;当修改A表的一条数据时&#xff0c;需要关联修改B表、C表甚至其他更多表的数据&#xff0c;为什么会这样呢&#xff1f; 在真实的业务场景中&#xff0c;往往一张表的数据关联的业务是多样的&#xff0c;举例…

mysql存储过程call_mysql call 存储过程

PHP调用MYSQL存储过程实例 PHP调用MYSQL存储过程实例 标签&#xff1a; mysql存储phpsqlquerycmd 2010-09-26 11:10 11552人阅读 评论(3) 收藏 举报 实例一&#xff1a;无参的存储过程$conn mysql_connect(localhost,root,root) o... 文章 thinkyoung 2016-01-20 544浏览量 存…

ORACLE存储过程

oracle存储过程 目录 oracle存储过程 一.什么是存储过程 二.为什么要写存储过程 三.存储过程基础 1.存储过程结构 2.存储过程语法 3.pl/sql处理存储过程 4.案例实战 四.存储过程进阶 1.BUIK COLLECT 2.FORALL 3.pl/sql调试存储过程 4.案例实战 附.参考资料 一.什…

Greenplum创建存储过程

1.美图 1.对比 greenplum 的plpgsql 注意: greenplum 的plpgsql 与 postgresql 不是完全兼容的。plpgsql 不明确界定 函数和存储过程&#xff0c;“returns void” 表示 存储过程&#xff0c;“return 数据类型” 表示 函数。greenplum中的函数分成3种类型: immutable(不可变…

Mysql 创建存储过程和函数及各种例子

Mysql 创建存储过程和函数及各种例子 1. Mysql 创建存储过程1.1 前言知识1.1.1 语法结构1.1.2 简单解释 1.2 创建存储过程入门例子1.2.1 无参存储过程1.2.1.1 不带变量1.2.1.2 带变量 1.2.2 有入参的存储过程1.2.3 有出参的存储过程1.2.4 有入参和存储的存储过程1.2.5 inout的存…