标签:开始 imu error inf 需要 question 线程id app 资料
===============================================
2020/2/25_第1次修改 ccb_warlock
===============================================
由于之前的时间都忙于项目的业务开发,对于log4net的使用一直是“拿来主义”,仅仅用在了调试时输出到控制台看结果,而没有深究配置文件的参数和具体的机制。
正巧这段时间项目进度没有那么紧张,我也有时间来完善框架内日志输出的部分,抱着“先易后难”的想法,我先不去实现向类似elasticsearch这样的日志系统去写日志,先从实现写入本地文件开始。
最初写winform的时候,隐约记得大都是通过数据流的方式向某个文件去写日志,其中还要考虑日志的文件是否存在、是否超过了大小、线程安全怎么做等等问题,在试验后发现log4net的功能封装的确实很简洁。
PS.当然配置文件可以不叫这个名字,为了方便我这里直接使用log4net.config
# 将下面的内容添加到log4net.config
<?xml version="1.0" encoding="utf-8"?> <log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message %newline" /> </layout> </appender> <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="/var/tmp/log/myApp/debug/" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <staticLogFileName value="false" /> <datePattern value="yyyy-MM-dd‘.txt‘" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="/var/tmp/log/myApp/error/" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <staticLogFileName value="false" /> <datePattern value="yyyy-MM-dd‘.txt‘" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="ERROR" /> <param name="LevelMax" value="FATAL" /> </filter> </appender> <root> <level value="ALL" /> <appender-ref ref="ConsoleAppender" /> <appender-ref ref="DebugRollingFileAppender" /> <appender-ref ref="ErrorRollingFileAppender" /> </root> </log4net>
PS.
可以看到,DebugRollingFileAppender和ErrorRollingFileAppender就是为了实现写入本地文件而创建的配置,接着针对里面的参数项做详细的描述。
参数项 | 描述 | 值范围 |
file | 日志文件所在的路径 | |
appendToFile | 写入方式 |
true.增量写入 false.覆盖写入 |
rollingStyle | 命名方式 |
Date.按照日期来命名 Size.按照文件大小来命名 Composite.综合日期和文件大小来命名 |
staticLogFileName | 文件名是否可变 |
true.不可变(静态) false.可变 |
datePattern | 日期格式(用来控制滚动周期)。如果需要.txt后缀,可以在内容后面加上‘.txt‘。 | |
maxSizeRollBackups | 滚动周期内的最大文件数 | -1.表示无数量限制 |
maximumFileSize |
每个文件的最大占用空间。 当该日志文件超过限定值后,如果滚动周期内的日志文件数小于最大文件数时,将会创建一个新的文件。如果等于最大文件数时,则会重新从滚动周期内的第1个文件重新开始写起 |
|
conversionPattern | 每条日志的格式 | |
filter | 过滤器(根据具体的类型设置来记录日志) |
接着单独拿出日志记录的格式来说明
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
参数 | 描述 | 简写 |
%datetime | 生成日志记录的时间 | %d |
%thread | 生成日志记录的线程ID | %t |
%-5level | 该日志的级别 | |
%logger | 生成该日志的方法所在的类(包含程序集) | |
%property | 属性 | |
%message | 日志的信息 | %m |
%newline | 换行 | %n |
%L | 该日志语句所在文件的行号 | |
%F | 该日志语句所在的文件路径(包含文件名) |
level: 记录日志的最低级别,根据级别对应记录的日志如下:
ALL DEBUG INFO WARN ERROR FATAL OFF
•All
•DEBUG •DEBUG
•INFO •INFO •INFO
•WARN •WARN •WARN •WARN
•ERROR •ERROR •ERROR •ERROR •ERROR
•FATAL •FATAL •FATAL •FATAL •FATAL •FATAL
•OFF •OFF •OFF •OFF •OFF •OFF •OFF
我的项目是基于.net core 2.2创建的asp.net core项目,对于log4net的加入是在program.cs里实现的,具体的代码如下:
using Microsoft.AspNetCore; using Microsoft.AspNetCore.Hosting; using Microsoft.Extensions.Logging; namespace Api { public class Program { public static void Main(string[] args) { CreateWebHostBuilder(args).Build().Run(); } private static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureLogging((context, logging) => { logging.AddLog4Net(); }) .UseStartup<Startup>(); } }
接着后面的程序只要有log输出就会向指定的文件内写日志,例如我在定时任务中添加的日志输出:
using log4net; using Quartz; namespace Domain.Jobs { public class ServiceToken : IJob { private readonly ILog _log = LogManager.GetLogger(typeof(ServiceToken)); ······ public Task Execute(IJobExecutionContext context) { var now = DateTimeOffset.Now; _log.Debug($"{now:yyyy/MM/dd HH:mm:ss.fff}, 执行维护token的任务."); // todo return Task.CompletedTask; } } }
1.http://logging.apache.org/log4net/release/config-examples.html
2.https://stackoverflow.com/questions/8926409/log4net-hierarchy-and-logging-levels?r=SearchResults
在asp.net core的项目中通过log4net添加日志记录到本地文件
标签:开始 imu error inf 需要 question 线程id app 资料
原文地址:https://www.cnblogs.com/straycats/p/12359787.html