当前位置:网站首页>Log4net is in Net core usage
Log4net is in Net core usage
2022-04-23 03:16:00 【Pingshan CP3】
log4net Use , Log information can be output to various terminals ( text file 、 database 、windows Log etc. ), The implementation process is mainly about how to configure the configuration files of various output modes :
1. install log4net package

If you need to output to the database , Corresponding import package
Be careful : If in .net core Use in , And in Program.cs Register configuration in , The second package mentioned above must be introduced
2. New configuration file log4net.config
Of course, the name of the configuration file can be customized , The attribute is “ Always copy ”. Just register right . The specific configuration method is available on the official website Apache log4net – Apache log4net: Config Examples - Apache log4net, The code description will also be posted at the end of this article .
3. call log4net
(1) Normal call method , Applicable to .Net Core and .Net FrameWork All items
// establish logger, The name can be defined at will
ILoggerRepository repository = LogManager.CreateRepository("logNETCoreRepository");
// Appoint log4net Configuration file for , It's yours log4net The file of
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
// Statement log object , Designated to use logger And searcher name , The name of the retriever corresponds to... In the log template logger, It can be an assembly name or customized
//var log = log4net.LogManager.GetLogger(repository.Name, "logNETCoreRepository1");
// Statement log object , Designated to use logger And searcher name , The name of the retriever corresponds to... In the log template logger, It can be an assembly name or customized , Here is the full name of the current method class + Method name
var log = log4net.LogManager.GetLogger(repository.Name, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName+"."+System.Reflection.MethodBase.GetCurrentMethod().Name);
// Write to the log
log.Info("addlog");
// Write warning message
log.Warn("Warn");
You can also integrate this paragraph into a help class to use .
(2) stay .Net Core MVC Can be used by dependency injection :
First, in the Program.cs Of CreateHostBuilder Configure in method Log4net:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logger => logger.AddLog4Net("log4net.config"))//log4net The configuration file
.ConfigureAppConfiguration((hostingContext, config) =>
{
config.Sources.Clear();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Then in the controller or model Middle dependency injection 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 Constructed ...");
}
public IActionResult Index()
{
_logger.LogInformation("Home Index To be accessed ...");
string ret = _mm.test();
string temp = _configuration["ccc"];
return Content($"{temp}----{ret}");
}
}
(3) Of course. .Net Framework You can use , stay Properties Of AssemblyInfo.cs Add the following code in , To specify log4net Configuration file for
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
This requires two more steps , One is in log4net.config Lieutenant general root Replace node with logger node
<logger name="loginfo">
<level value="ALL"/>
<appender-ref ref="rollingAppender" />
</logger>
Finally, when calling, call :
var log=log4net.LogManager.GetLogger("loginfo");//loginfo This is the... In the previous step logger name
log.Info("addlog")
4. Configuration information , Include in append text file ,sqlite database ,mysql Database and windows In the log .
<?xml version="1.0" encoding="utf-8"?>
<log4net debug="true">// Open the debug
<!-- Define some output appenders -->
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
<file value="log\log.txt" />
<!-- Add log content -->
<appendToFile value="true" />
<!-- Prevent multithreading when unable to write Log, Officials say threads are not safe -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- It can be for :Once|Size|Date|Composite-->
<!--Composite by Size and Date The combination of -->
<rollingStyle value="Composite" />
<!-- When backing up files , Suffix to the file name -->
<datePattern value="yyyyMMdd.txt" />
<!-- Maximum number of logs , It's all the latest -->
<!--rollingStyle The node is Size when , There can only be value A journal -->
<!--rollingStyle The node is Composite when , Every day value A journal -->
<maxSizeRollBackups value="3" />
<!-- Available units :KB|MB|GB-->
<maximumFileSize value="2KB" />
<!-- Set as true, The current latest log file name is always file The name of the festival -->
<staticLogFileName value="true" />
<!-- Output level in INFO and ERROR Log between -->
<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>
<!-- Write to sqlite database -->
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!-- The size of the buffer event , Set to less than or equal to 1 Value , No buffering will occur , Logging is performed synchronously , Otherwise, the event will be buffered -->
<bufferSize value="1" />
<!-- Database type -->
<connectionType value="System.Data.SQLite.SQLiteConnection,System.Data.SQLite" />
<!-- Database address -->
<connectionString value="Data Source=~/log.db;Version=3;" />
<!-- Write log statement -->
<commandText value="INSERT INTO Log(Date, Level, Logger, Message) VALUES (@Date, @Level, @Logger, @Message)" />
<parameter>
<!-- Configuration fields -->
<parameterName value="@Date" />
<!-- Field data type -->
<dbType value="DateTime" />
<!-- Beijing time. -->
<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>
<!-- Write to mysql database -->
<appender name="MysqlAdoNetAppender" type="log4net.Appender.AdoNetAppender">
<!-- The size of the buffer event , Set to less than or equal to 1 Value , No buffering will occur , Logging is performed synchronously , Otherwise, the event will be buffered -->
<bufferSize value="1" />
<!-- Database type -->
<connectionType value="MySql.Data.MySqlClient.MySqlConnection,MySql.Data" />
<!-- Database address -->
<connectionString value="server=192.168.1.188;port=3306;database=enav;uid=root;pwd=root;" />
<!-- Write log statement -->
<commandText value="INSERT INTO lognet(`Date`, `Level`, `Logger`, `Message`) VALUES (@date, @level, @logger, @message)" />
<parameter>
<!-- Configuration fields -->
<parameterName value="@date" />
<!-- Field data type -->
<dbType value="DateTime" />
<!-- Beijing time. -->
<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>
<!-- Write to windows In the log -->
<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>
It's using MySql when , Found some versions in use Mysql Database nuget Packet time , Write failure , Has been an error , Just change the version , I don't know Mysql Some versions are right Log4net Compatibility .
There's also an important point , Turn on log4net Debugging is right here log4net Add in node debug="true" Just fine , You can print it on the console log4net Relevant debugging information .
End
版权声明
本文为[Pingshan CP3]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/04/202204220627117280.html
边栏推荐
- be based on. NETCORE development blog project starblog - (2) environment preparation and creation project
- 2022A特种设备相关管理(电梯)上岗证题库及模拟考试
- Student achievement management
- Aspnetcore configuration multi environment log4net configuration file
- svg标签中利用<polygon/>循环数组绘制多边形
- 全新的ORM框架——BeetlSQL介绍
- 通过 zxing 生成二维码
- Fundamentals of software testing and development
- The most easy to understand dependency injection and control inversion
- 队列的存储和循环队列
猜你喜欢

MySQL port is occupied when building xampp

Ningde's position in the times is not guaranteed?

Course design of Database Principle -- material distribution management system

Ide-idea-problem

Chapter 8 of C language programming (fifth edition of Tan Haoqiang) is good at using pointer exercises to analyze and answer

Seminar playback video: how to improve Jenkins' ability to become a real Devops platform

MySQL索引详解【B+Tree索引、哈希索引、全文索引、覆盖索引】

Use of slice grammar sugar in C #

关于idea调试模式下启动特别慢的优化

How to achieve centralized management, flexible and efficient CI / CD online seminar highlights sharing
随机推荐
2022A特种设备相关管理(电梯)上岗证题库及模拟考试
编码电机PID调试(速度环|位置环|跟随)
MySQL port is occupied when building xampp
Xamarin effect Chapter 22 recording effect
数据库表中不建索引,在插入数据时,通过sql语句防止重复添加(转载)
JS recursive tree structure calculates the number of leaf nodes of each node and outputs it
Fight leetcode again (290. Word law)
再战leetcode (290.单词规律)
Knowledge of software testing~
Data mining series (3)_ Data mining plug-in for Excel_ Estimation analysis
Due to 3 ²+ four ²= five ², Therefore, we call '3,4,5' as the number of Pythagorean shares, and find the array of all Pythagorean shares within n (including n).
Use of metagroup object tuple in C
《C语言程序设计》(谭浩强第五版) 第9章 用户自己建立数据类型 习题解析与答案
Queue storage and circular queue
为什么BI对企业这么重要?
2022年做跨境电商五大技巧小分享
2022年度Top9的任务管理系统
类似Jira的十大项目管理软件
js递归树结构计算每个节点的叶子节点的数量并且输出
C syntax sugar empty merge operator [?] And null merge assignment operator [? =]