在项目开发过程中,部署的服务器越来越多,查看日记的时候需要每台服务器去找日记看,这对运维人员来说是一个很不友好的方式。在此基础上就提出将所有日记统一到一台服务器上进行存放,并按照产生日记的服务器分文件夹。这时候想使用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. cinder create volume的流程-scheduler调度

    创建 Volume 时,cinder-scheduler 会基于容量.Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume. 1.cinder-scheduler配置相关项 ...

  2. 用Python写一个随机密码生成器

    # /bin/python3 import sys import time import random strs = [ i for i in range(32,128) ] #产生密码的ASCII码 ...

  3. 【bzoj3998】弦论 后缀自动机

    Description 对于一个给定长度为N的字符串,求它的第K小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串S 第二行为两个整数T和K,T为0则表示不同位置的相同子串算作一个. ...

  4. 【FAQ】服务下线

    原因:磁盘已满

  5. Python获取网页Html文本

    Python爬虫基础 1.获取网页文本 通过urllib2包,根据url获取网页的html文本内容并返回 #coding:utf-8 import requests, json, time, re, ...

  6. bdd相关整理介绍

    BDD介绍 什么是BDD Behavior-driven development In software engineering, behavior-driven development (BDD) ...

  7. 4A - Horse

    打表找规律 #include <iostream> #include <queue> using namespace std; ][]; ]{, , , , -, -, -, ...

  8. phpmyadmin更改用户名和密码

    我是用的xampp集成环境,wampp也差不多.另外没有配图,希望读者可以在实践的过程中有所思考,本文的主旨就是:找一个不叫root但和root一样厉害的人来管理数据库. 1,做个准备 首先创建一个和 ...

  9. C++_基础6-名称空间

    名称空间 背景:C++中,名称可以是变量.函数.结构.枚举.类以及类和结构的成员.当随着项目的增大,名称相互冲突的可能性也将增加.例如许多厂商的类库,可能导致名称冲突.这种冲突被称为名称空间问题. 解 ...

  10. [HNOI2014]抄卡组

    [Luogu3234] [LOJ2208] 题解及代码 锻炼哈希码力的一道题 , 具体细节见代码 #include<cstdio> #include<cstring> #inc ...