当前位置:网站首页>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
边栏推荐
- General testing technology [1] classification of testing
- C syntax pattern matching [switch expression]
- [untitled]
- Mysql database design specification
- 队列的存储和循环队列
- Web Course Design - his system
- 编码电机PID调试(速度环|位置环|跟随)
- 12.<tag-链表和常考点综合>-lt.234-回文链表
- Why is bi so important to enterprises?
- The most understandable life cycle of dependency injection
猜你喜欢
ASP. Net 6 middleware series - conditional Middleware
12.<tag-链表和常考点综合>-lt.234-回文链表
一套组合拳,打造一款 IDEA 护眼方案
How to achieve centralized management, flexible and efficient CI / CD online seminar highlights sharing
Data mining series (3)_ Data mining plug-in for Excel_ Estimation analysis
2022 Shandong Province safety officer C certificate work certificate question bank and online simulation examination
可以接收多种数据类型参数——可变参数
2022 P cylinder filling training test questions and simulation test
Student achievement management
搭建XAMPP时mysql端口被占用
随机推荐
[Mysql] LEFT函数 | RIGHT函数
Why is bi so important to enterprises?
手机连接电脑后,QT的QDIR怎么读取手机文件路径
可以接收多種數據類型參數——可變參數
研讨会回放视频:如何提升Jenkins能力,使其成为真正的DevOps平台
Using positive and negative traversal to solve the problem of "the shortest distance of characters"
全新的ORM框架——BeetlSQL介绍
Chapter 9 of C language programming (fifth edition of Tan Haoqiang) analysis and answer of exercises for users to establish their own data types
[authentication / authorization] customize an authentication handler
Use of ADB command [1]
类似Jira的十大项目管理软件
It can receive multiple data type parameters - variable parameters
Fight leetcode again (290. Word law)
Ide-idea-problem
Improvement of ref and struct in C 11
Comprehensive calculation of employee information
MySql分组查询规则
一套组合拳,打造一款 IDEA 护眼方案
超好用的Excel异步导出功能
【VS Code】解决jupyter文件在vs code中显示异常的问题