C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证
C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证
参考了:https://www.cnblogs.com/-dawn/p/8598566.html
GetLog4netInstance:
using log4net;
using log4net.Appender;
using log4net.Config;
using log4net.Core;
using log4net.Filter;
using log4net.Layout;
using log4net.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection.Emit;
using System.Text; namespace ConsoleApp1
{
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
//%d 时间,[%t] 线程ID,%-2.18M 方法名(最少2位,最多18位),%m%n 消息和换行
string PatternStr = "%d [%t] %-2.18M - %m%n";
PatternLayout layout = new PatternLayout(PatternStr); // Level Filter
LevelMatchFilter filter = new LevelMatchFilter();
filter.LevelToMatch = Level.All;
filter.ActivateOptions();
// File Appender
RollingFileAppender appender = new RollingFileAppender();
// 目录
//appender.File = $"logs\\{name}\\"; //按名称单独一个目录
appender.File = "logs\\"; // 所有名称放同一目录 // 立即写入磁盘
appender.ImmediateFlush = true;
// true:追加到文件;false:覆盖文件
appender.AppendToFile = true;
// 新的日期或者文件大小达到上限,新建一个文件
appender.RollingStyle = RollingFileAppender.RollingMode.Composite;
// 文件大小达到上限,新建文件时,文件编号放到文件后缀前面
appender.PreserveLogFileNameExtension = true;
// 时间模式
//appender.DatePattern = "yyyyMMdd'.txt'"; // 日期.txt
appender.DatePattern = "'" + name + "-'" + "yyyyMMdd'.txt'"; // 名称-日期.txt,"'名称-'yyyyMMdd'.txt'"
// 最小锁定模型以允许多个进程可以写入同一个文件
appender.LockingModel = new FileAppender.MinimalLock();
appender.Name = name+"Appender";
appender.AddFilter(filter);
appender.Layout = layout;
appender.ActivateOptions();
// 文件大小上限
appender.MaximumFileSize = "100MB";
// 设置无限备份=-1 ,最大备份数为30
appender.MaxSizeRollBackups = 999;
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;
}
} }
使用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
try
{
var AccountLoger = GetLog4netInstance.GetLogger("DD-子商户号");
var BalanceLoger = GetLog4netInstance.GetLogger("A#.ZZ"); int i = 0;
while (i < 10)
{
string msg = i + ":hello world。";
BalanceLoger.Debug(msg);
AccountLoger.Debug(msg);
i++;
}
}
catch (Exception ex)
{
Console.WriteLine("ex!"+ex.Message);
}
Console.WriteLine("结束!");
Console.ReadKey();
}
}
}
效果:
END
C#.NET根据不同业务类别类型写入不同文件中,动态创建log4net实例验证的更多相关文章
- Java基础之序列化对象——将对象写入到文件中(SerializeObjects)
控制台程序. 首先定义一个含有任意不同数据类型域的可序列化类: import java.io.Serializable; public class Junk implements Serializab ...
- 通俗易懂,C#如何安全、高效地玩转任何种类的内存之Span的脾气秉性(二)。 异步委托 微信小程序支付证书及SSL证书使用 SqlServer无备份下误删数据恢复 把list集合的内容写入到Xml中,通过XmlDocument方式写入Xml文件中 通过XDocument方式把List写入Xml文件
通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的脾气秉性(二). 前言 读完上篇<通俗易懂,C#如何安全.高效地玩转任何种类的内存之Span的本质(一).>,相信大家对sp ...
- c#用log4Net将日志写入到Oracle数据库,并写入到文件中
原文:c#用log4Net将日志写入到Oracle数据库,并写入到文件中 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https:/ ...
- C#通过OLEDB将DataTable写入Excel文件中
利用OLEDB将DataTable数据写入Excel文件中,如果数据量过多,执行效率很缓慢,大数据量不推荐使用此方法. /// <summary> /// 创建DataTable /// ...
- Java基础之写文件——将多个字符串写入到文件中(WriteProverbs)
控制台程序,将一系列有用的格言写入到文件中. 本例使用通道把不同长度的字符串写入到文件中,为了方便从文件中恢复字符串,将每个字符串的长度写入到文件中紧靠字符串本身前面的位置,这可以告知在读取字符串之前 ...
- PHP将数据写入指定文件中
首先创建一个空的txt文件,这里我们创建了一个1.txt的空文件. 第一种方法:fwrite函数 <?php $file=fopen('1.txt','rb+'); var_dump(fwrit ...
- Python:将爬取的网页数据写入Excel文件中
Python:将爬取的网页数据写入Excel文件中 通过网络爬虫爬取信息后,我们一般是将内容存入txt文件或者数据库中,也可以写入Excel文件中,这里介绍关于使用Excel文件保存爬取到的网页数据的 ...
- 将对象以json格式写入到文件中
将 list 对象以json格式写入到文件中 try { ObjectMapper mapper = new ObjectMapper(); String value = mapper.writeVa ...
- 生成大量插入语句,并将语句写入txt文件中
import java.io.*; /** * Created by czz on 2019/9/23. */ public class TTest { /** * 生成大量插入语句,并将语句写入tx ...
- 连接数据库查询 将查询结果写入exce文件中
package com.cn.peitest.connectDatabase; import java.io.File; import java.lang.reflect.Field; import ...
随机推荐
- NIFI简介
NIFI简介 首先是官网地址:Apache NiFi,不过会百度的估计都能搜到 因为后面的工作一定会用到,所以大致的听了一下讲解操作之类的 大概感觉就是NIFI是个web端的一种控制数据走向的工具?可 ...
- Serverless 应用引擎 SAE 携手谱尼测试共同抗疫
简介:潮落江平未有风,扁舟共济与君同. 阿里云联合乘云至达与谱尼测试携手, 共同筑建抗疫堡垒,共抗疫情.共克时艰. 作者 | 计缘 背景 当前疫情形势依然严峻,各行各业众志成城,携手抗疫.新冠病毒核 ...
- 唯品会:在 Flink 容器化与平台化上的建设实践
简介: 唯品会 Flink 的容器化实践应用,Flink SQL 平台化建设,以及在实时数仓和实验平台上的应用案例. 转自dbaplus社群公众号作者:王康,唯品会数据平台高级开发工程师 自 2017 ...
- [Cloud] From Borg to Kubernetes
Borg System Architect: Kubernetes System Architect: Link:https://www.cnblogs.com/farwish/p/12751861. ...
- 🎊这个 OpenTiny 开源项目的 CLI 可太牛了,两行命令创建一个美观大气的 Vue Admin 后台管理系统,有手就会,连我的设计师朋友都学会啦啦
大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 近期尝试了下 OpenTiny 的 CLI 工具,不得不说 ...
- VisualStudio 如何快速添加一个 Git Tag 推送
在 VisualStudio 的团队管理功能,提供了方便的添加 Tag 的方法,可以新建一个 Tag 添加 Tag 信息,同时推送某个特定的 Tag 到服务器.配合推 Tag 打包 NuGet 的方法 ...
- 11.Node节点维护
题目:Node节点维护 配置环境kubectl config use-context ek8s 将名为ek8s-node-0的node节点设置为不可用,并重新调度该node上所有运行的pods. 官方 ...
- 解决Host key verification failed.(亲测有效)
哈喽哇,今天在访问远程服务器的时候,出现了一个小问题. 原因:之前ssh联系过服务器,重置服务器后,再次连接服务器,就会出这个问题. 一.发现问题 问题如下图代码: $ ssh root@108.61 ...
- Django RESTful API设计与实践指南
title: Django RESTful API设计与实践指南 date: 2024/5/14 15:37:45 updated: 2024/5/14 15:37:45 categories: 后端 ...
- webapi动态创建后台任务(使用排队的后台任务)
很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应.这时候就可以使用排队的后台任务. 基本原理是用 ...