当前位置:网站首页>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
边栏推荐
- JS recursive tree structure calculates the number of leaf nodes of each node and outputs it
- Tencent video VIP member, weekly card special price of 9 yuan! Tencent official direct charging, members take effect immediately!
- 《C语言程序设计》(谭浩强第五版) 第9章 用户自己建立数据类型 习题解析与答案
- 在.NE6 WebApi中使用分布式缓存Redis
- The backtracking of stack is used to solve the problem of "the longest absolute path of file"
- 【VS Code】解决jupyter文件在vs code中显示异常的问题
- [vs Code] solve the problem that the jupyter file displays exceptions in vs code
- The most detailed in the whole network, software testing measurement, how to optimize software testing cost and improve efficiency --- hot
- yes. Net future
- 2022山东省安全员C证上岗证题库及在线模拟考试
猜你喜欢

研讨会回放视频:如何提升Jenkins能力,使其成为真正的DevOps平台

ASP. Net 6 middleware series - Custom middleware classes

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).

Xamarin effect Chapter 21 expandable floating operation button in GIS
![[Mysql] LEFT函数 | RIGHT函数](/img/26/82e0f2280de011636c26931a74e749.png)
[Mysql] LEFT函数 | RIGHT函数

Experiment 6 input / output stream

2022a special equipment related management (elevator) work license question bank and simulation examination

Tencent video VIP member, weekly card special price of 9 yuan! Tencent official direct charging, members take effect immediately!

PID debugging of coding motor (speed loop | position loop | follow)

Source generator actual combat
随机推荐
Test experience data
How does Microsoft solve the problem of multiple programs on PC side -- internal implementation
JSON related
PID debugging of coding motor (speed loop | position loop | follow)
Student achievement management
ASP. Net 6 middleware series - conditional Middleware
How does Microsoft solve the problem of multiple PC programs
先中二叉建树
Fight leetcode again (290. Word law)
OLED multi-level menu record
Blazor University (12) - component lifecycle
2022山东省安全员C证上岗证题库及在线模拟考试
C WPF UI framework mahapps switching theme
The most understandable life cycle of dependency injection
[vs Code] solve the problem that the jupyter file displays exceptions in vs code
类似Jira的十大项目管理软件
数据挖掘系列(3)_Excel的数据挖掘插件_估计分析
LoadRunner - performance testing tool
Source generator actual combat
Mysql database