在项目开发过程中,部署的服务器越来越多,查看日记的时候需要每台服务器去找日记看,这对运维人员来说是一个很不友好的方式。在此基础上就提出将所有日记统一到一台服务器上进行存放,并按照产生日记的服务器分文件夹。这时候想使用log4net就需要配置很多配置项,明显不是我们想要的。现在只能去修改log4net的源代码去满足这一要求。经过修改后的源代码在配置日记文件路径和调用创建日记对象的传入参数上做些修改就可以动态配置路径。因为没必要做太多层次的动态配置,这里只实现了2层路径的动态配置。

  1.配置文档

  

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--配置文件路径;这里修改源码,在调用LogManager.GetLogger(name)时,name结构是Client_LogType_logger-->>
<file value="logs/%Client/%LogType/" />
<!--是否追加到文件-->
<appendToFile value="true" />
<!--最大变换数量,-1为不限制-->
<MaxSizeRollBackups value="-1" />
<!--文件大小-->
<MaximumFileSize value="1MB"/>
<encoding value="utf-8" />
<!--文件以那种方式变换文件名:data日期/Size大小/Composite同时按照日期和大小-->
<rollingStyle value="Composite" />
<!--文件名格式-->
<datePattern value="&quot;log_&quot;yyyyMMdd&quot;.log&quot;" />
<!--是否为固定的文件名,理论上讲不会动态改变-->
<StaticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date %-5level [%thread] %newline%message%newline----------------------------------------%newline"/>
</layout>
</appender>
<logger name="Test">
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</logger>

  2.调用

  

using log4net;
using System.Collections.Generic; namespace Log4netTest
{
public class LogHelper
{
//将日记对象缓存起来
public static Dictionary<string, ILog> LogDic = new Dictionary<string, ILog>();
static object _islock = new object();
public static ILog GetLog(string name)
{
try
{
if (LogDic == null)
{
LogDic = new Dictionary<string, ILog>();
}
lock (_islock)
{
if (!LogDic.ContainsKey(name))
{
LogDic.Add(name, LogManager.GetLogger(name));
}
}
return LogDic[name];
}
catch
{
return LogManager.GetLogger("Default");
}
} public static void Debug(string client, string name, object message)
{
//该参数有三部分组成:客户端_日记类型_logger配置名称;<file value="logs/%Client/%LogType/" />
       //value如果不需要客户端时可写成<file value="logs/%LogType/" />;这里是需要动态配置的才加上
       //在上面的配置,name传入的就是 Test 最终字符串是:客户端_Debug_Test
var log = GetLog(string.Format("{0}_Debug_{1}", client, name));
if (log == null)
{
return;
}
log.Debug(message);
}
public static void Error(string client, string name, object message)
{
var log = GetLog(string.Format("{0}_Error_{1}", client, name));
if (log == null)
{
return;
}
log.Error(message);
}
}
}

log4net.dll

log4net日记文件路径动态配置的更多相关文章

  1. 使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置

    mybatis – MyBatis 3 | 入门 http://www.mybatis.org/mybatis-3/zh/getting-started.html 从 XML 中构建 SqlSessi ...

  2. winform app.config文件的动态配置

    获取 获取应用程序exe.config文件中  节点value值 /// <summary> /// 功能: 读取应用程序exe.config文件中 /// appSettings节点下 ...

  3. dive into python:模块的导入和搜索文件路径的配置

    1.Python中导入模块:import sys:相当于Java中的导入包.类. 比如,我们导入sys模块,使用:import sys; 2.Python中调用函数的时候,会从默认配置的库文件夹中(s ...

  4. log4j输出多个自定义日志文件,动态配置路径

    Log4J的配置文件(Configuration File)就是用来设置记录器的级别.存放器和布局的,它可接key=value格式的设置或xml格式的设置信息.通过配置,可以创建出Log4J的运行环境 ...

  5. 通过代码获取log4net的文件路径

    http://stackoverflow.com/questions/1343749/get-log4net-log-file-in-c-sharp Solution is quite easy in ...

  6. Django框架之模板路径及静态文件路径配置

    内容: (1)模板文件路径的配置 (2)静态文件路径的配置 一.模板文件路径的配置 模板文件主要通过jinja2模板进行渲染html页面,实现动态页面. 步骤一:创建一个template的文件夹,用于 ...

  7. 使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置

    1.使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置 2.上代码:在resources目录下新建:generatorConfiguration.xml文 ...

  8. nginx root&alias文件路径配置

    转:https://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/ 总结: alias 改变了访问路径.root对应loca ...

  9. nginx root && alias 文件路径配置

    文章摘自:http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/ nginx指定文件路径有两种方式root和alias ...

随机推荐

  1. 动态内存分配存在的问题(内存空洞)------c++程序设计原理与实践(进阶篇)

    new的问题究竟在哪里呢?实际上问题出在new和delete的结合使用上.考察下面程序中内存分配和释放过程: while(1){ Big* p=new big; //...... Small* n1= ...

  2. NSCache 缓存

    前言 NSCache 是苹果提供的一个专门用来做缓存的类,当内存 "不足" 或超过限制的时候,会自动清理缓存,使用时可以指定缓存的数量和成本. 用法与 NSMutableDicti ...

  3. nginx负载均衡fair模块安装和配置

    nginx-upstream-fair-master fair模块源码 官方github下载地址:https://github.com/gnosek/nginx-upstream-fair说明:如果从 ...

  4. P2410 [SDOI2009]最优图像 ZKW最大费用最大流

    $ \color{#0066ff}{ 题目描述 }$ 小E在好友小W的家中发现一幅神奇的图画,对此颇有兴趣.它可以被看做一个包含N×M个像素的黑白图像,为了方便起见,我们用0表示白色像素,1表示黑色像 ...

  5. Visual Studio 2019 秘钥

    Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 ProfessionalNYWVH-HT4X ...

  6. em 与 rem 区别.

    em 与自身  字体大小有关. rem 与 body 的字体大小有关..

  7. 不带 www 跳转 到 带 www 网站..

    IIS: <rule name="已导入的规则 1-1" stopProcessing="true"> <match url="^( ...

  8. 洛谷 P1453 城市环路 ( 基环树树形dp )

    题目链接 题目背景 一座城市,往往会被人们划分为几个区域,例如住宅区.商业区.工业区等等.B市就被分为了以下的两个区域--城市中心和城市郊区.在着这两个区域的中间是一条围绕B市的环路,环路之内便是B市 ...

  9. swiper、fullPage、hammer几种滑动插件对比

    1.使用hammer,自己实现滑动垂直切换页面 <!DOCTYPE html> <html lang="en"> <head> <titl ...

  10. Http多线程下载文件

    package unit; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputSt ...