动态创建log4net 实例
https://www.cnblogs.com/-dawn/p/8598566.html
根据业务类型,动态的创建日志实例,将日志写到不同目录。常见的配置文件中统一配置,不能满足需求。
引用log4net
nuget安装命令: Install-Package log4net -Version 2.0.8
日志实例创建类
我这里log实例的相关参数都是直接写死的,你可以根据需要读取配置文件。参数都配有备注,更多参数的含义,网上都可以搜到。
public class GetLog4netInstance
{
private static Dictionary<string, ILog> Logers = new Dictionary<string, ILog>();
/// <summary>
/// 获取log实例
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public static ILog GetLogger(string name)
{
if (Logers.ContainsKey(name))
return Logers[name];
else
{
lock (Logers)
{
if (Logers.ContainsKey(name)) return Logers[name];
else
{
var newLoger = CreateLogerInstance(name);
Logers.Add(name, newLoger);
return newLoger;
}
}
}
}
/// <summary>
/// 创建Log实例
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
private static ILog CreateLogerInstance(string name)
{
// Pattern Layout
PatternLayout layout = new PatternLayout("%date{yyyy-MM-dd HH:mm:ss} %-5level[%L] %message% %F%newline");
// Level Filter
LevelMatchFilter filter = new LevelMatchFilter();
filter.LevelToMatch = Level.All;
filter.ActivateOptions();
// File Appender
RollingFileAppender appender = new RollingFileAppender();
// 目录
appender.File = $"logs\\{name}\\";
// 立即写入磁盘
appender.ImmediateFlush = true;
// true:追加到文件;false:覆盖文件
appender.AppendToFile = true;
// 新的日期或者文件大小达到上限,新建一个文件
appender.RollingStyle = RollingFileAppender.RollingMode.Composite;
// 文件大小达到上限,新建文件时,文件编号放到文件后缀前面
appender.PreserveLogFileNameExtension = true;
// 时间模式
appender.DatePattern = $"yyyyMMdd'.txt'";
// 最小锁定模型以允许多个进程可以写入同一个文件
appender.LockingModel = new FileAppender.MinimalLock();
appender.Name = $"{name}Appender";
appender.AddFilter(filter);
appender.Layout = layout;
appender.ActivateOptions();
// 文件大小上限
appender.MaximumFileSize = "200MB";
// 设置无限备份=-1 ,最大备份数为30
appender.MaxSizeRollBackups = 30;
appender.StaticLogFileName = false;
//create instance
string repositoryName = $"{name}Repository";
ILoggerRepository repository = LoggerManager.CreateRepository(repositoryName);
BasicConfigurator.Configure(repository, appender);
//After the log instance initialization, we can get the instance from the LogManager by the special log instance name. Then you can start your logging trip.
ILog logger = LogManager.GetLogger(repositoryName, name);
return logger;
}
}
调用实例。
创建实例的时候,相关参数直接写死了,所以不需要写配置文件。引用log4net以后,直接调用即可。
static void Main(string[] args)
{
var AccountLoger = GetLog4netInstance.GetLogger("Account");
var BalanceLoger = GetLog4netInstance.GetLogger("Balance");
int i = 0;
while (i < 500)
{
BalanceLoger.Debug(i);
AccountLoger.Debug(i);
i++;
}
Console.WriteLine("结束!");
Console.ReadKey();
}
参考:
["How to programmatically create log instance by Log4Net library"][1]
[1]: https://blogs.perficient.com/delivery/blog/2016/04/20/how-to-programmatically-create-log-instance-by-log4net-library/ "How to programmatically create log instance by Log4Net library"
动态创建log4net 实例的更多相关文章
- 动态创建 Log4net 实例
动态创建log4net 实例 根据业务类型,动态的创建日志实例,将日志写到不同目录.常见的配置文件中统一配置,不能满足需求. 引用log4net nuget安装命令: Install-Package ...
- .Net 中的反射(动态创建类型实例) - Part.4
动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...
- .Net 中的反射(动态创建类型实例)
动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...
- js基础例子动态创建table实例
<style> table{ width:500px; font-weight: bold; border: 1px solid #000; border-collapse:collaps ...
- Javascript:DOM动态创建元素实例应用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【C#反射】动态创建类型实例
转载自:https://www.cnblogs.com/dytes/archive/2012/06/29/2569488.html .NET中除了构造函数外,还有多种方式可以创建类型的实例.下面总结了 ...
- 动态代理CGlib实例
1.委托类: package 动态代理2; //需要对这个类进行增强 public class UserService { public void create() { System.out.prin ...
- 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值
前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...
- 动态创建DAL层类的实例
为了可扩展性,方便以后对于代码的修改维护,使用动态创建DAL层对象. 1.首先在webconfig中的configuration下添加配置项 <appSettings> <add k ...
- Vue中通过Vue.extend动态创建实例
Vue中通过Vue.extend动态创建实例 在Vue中,如果我们想要动态地来控制一个组件的显示和隐藏,比如通过点击按钮显示一个对话框或者弹出一条信息.我们通常会提前写好这个组件,然后通过v-if = ...
随机推荐
- 基于CentOS Stream 8的物联网数据采集与展示方案
系统架构全景图 图表 一.系统平台优化(CentOS Stream 8) 1. 系统基础配置 bash # 1. 系统更新与加固 sudo dnf update -y sudo dnf install ...
- cosbench工具使用方法
一.Cosbench工具介绍 cosbench是intel开源的针对对象存储开发的测试工具 二.Cosbench安装 运行环境: 这里我们的系统是Centos7.6 依赖软件: JDK nmap-nc ...
- 提高数据的安全性和可控性,数栈基于 Ranger 实现的 Spark SQL 权限控制实践之路
在企业级应用中,数据的安全性和隐私保护是极其重要的.Spark 作为数栈底层计算引擎之一,必须确保数据只能被授权的人员访问,避免出现数据泄露和滥用的情况.为了实现Spark SQL 对数据的精细化管理 ...
- 芋道源码RCE复现
先创建一个流程模型 再创建一个流程表单,添加一个输入框 将模型与此表单进行关联 发起流程 输入的命令被执行
- WebGL简易教程——结语
1 概述 笔者在几年前写过一系列关于WebGL的文章<WebGL简易教程--目录>,前端时间将其整理了一下,增加了一个在线案例的站点以便于学习查看.这里就顺便写一段结语吧. 2 观点 2. ...
- Feature Preserving Octree-Based Hexahedral Meshing
Feature Preserving Octree-Based Hexahedral Meshing 论文阅读 作者映入了一种新的算法尝试去产生一个纯粹的六面体网格并且不带有自交和正值雅克比.CAD模 ...
- POLIR: Polarization社会贫富分化的根本原因、科学的艺术化表达之客观主观与背景、以及权利的集中与社会发展
拨乱反正平反冤案赔偿昭雪先.共和与专制 看是否限制民主(人自主自由及财产). 尊重人的自主选择,人身.财产.自由: 如果"老一套搞得通","要新一套干什么"?新 ...
- oracle 索引失效原因及解决方法 -九五小庞
一.以下的方法会引起索引失效 1,<>2,单独的>,<,(有时会用到,有时不会)3,like "%_" 百分号在前.4,表没分析.5,单独引用复合索引里非 ...
- 游戏技术博客推荐 Red Blob Games
https://www.redblobgames.com/ 一名专注于游戏中算法实现的大佬
- CloudQuery v1.4.2 发布 | 新增 PolarDB 、数据导入工具
Hello,社区的小伙伴们,CloudQuery v1.4.2 已发布,本次新增数据源 PoalrDB.新增「数据导入」工具等,并且通过我们的努力,终于大幅减少了服务运行所需内存资源~ImageIma ...