log4net日记文件路径动态配置

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

时间: 2024-10-10 12:50:17

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

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

1.Python中导入模块:import sys:相当于Java中的导入包.类. 比如,我们导入sys模块,使用:import sys; 2.Python中调用函数的时候,会从默认配置的库文件夹中(sys.path)搜索你所调用的模块.这个库文件的目录配置,如下: sys.path用来配置Python模块搜索路径.它是一个List(列表),打印默认sys.path的内容: Python 3.3.5 (v3.3.5:62cf4e77f785, Mar  9 2014, 10:37:12) [MSC

Java - 自动配置log4j的日志文件路径

目录 1 日志路径带来的痛点 2 log4j.properties文件的配置 3 彻底解决痛点 3.1 单独的Java程序包 (非Java Web项目) 3.2 Web项目 4 附录 - 获取当前项目.类路径的几种方式 1 日志路径带来的痛点 Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径. 本文借鉴 To

nginx root&amp;alias文件路径配置

转:https://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/ 总结: alias 改变了访问路径.root对应location匹配位置的 第一个/  alias对应location匹配位置的最后一个 / 如:root /var/www    alias /var/ttt/   location 匹配 /a/  访问/a/b/a.html   root 对应结果 /var/www/a/b/a.html  alias

nginx root &amp;&amp; alias 文件路径配置

文章摘自:http://www.ttlsa.com/nginx/nginx-root_alias-file-path-configuration/ nginx指定文件路径有两种方式root和alias,这两者的用法区别,使用方法总结了下,方便大家在应用过程中,快速响应.root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上. [root] 语法:root path 默认值:root html 配置段:http.serve

tp5 模板参数配置(模板静态文件路径)

// 模板页面使用 <link rel="stylesheet" type="text/css" href="{:config('__STATICADMIN__')}/h-ui.admin/css/style.css" /> '__STATICCSS__' =>'/static/Css', 'template' => [ // 模板引擎类型 支持 php think 支持扩展 'type' => 'Think', /

jquery的uploadify插件多文件上传配置参数详解

最近做了个多文件上传,需要限制上传文件类型的例子.以前没做过找了一些资料,下次有用.同时也给大家做参考. uploader: uploadify.swf 文件的相对路径,该swf文件是一个带有文字BROWSE的按钮,点击后淡出打开文件对话框,默认值:uploadify.swf. script: 后台处理程序的相对路径 .默认值:uploadify.php checkScript:用来判断上传选择的文 件在服务器是否存在的后台处理程序的相对路径 fileDataName:设置一个名字,在服务器处理

如何指定GCC的默认头文件路径

如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:)原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631=============================================================================== 在交叉编译的时候我们需要用到其他的库,在config时候可以通过“-l”来指定目录,但是每次都需要设置的话难免有些麻烦,找到一个简单的方法.看下文的红色部分. 有大

thinkphp 动态配置

最近在用@ThinkPHP 做系统的时候,要用到一个功能,就要动态的将系统的配置参数保存到Config文件中.以往,我们做系统的时候,项目的配置参数都会直接事先写入到Config/Config.php文件中,然后在项目中应用即可.但是,有些项目,用户需要根据自己的情况将配置参数,通过后台动态的来设置.这种动态的参数配置,一般我们有两种方式,一种是写入到数据库,另一种就是写入到配置文件.今天,我来说说用配置文件的形式来实现这一功能.一.配置文件设置首先,我们在TP项目配置目录Config下新建一个

gcc指定头文件路径及动态链接库路径

一. #include <>与#include "" #include <>直接到系统指定的某些目录中去找某些头文件.#include ""先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件. 二. gcc指定头文件的三种情况: 1.会在默认情况下指定到/usr/include文件夹(更深层次的是一个相对路径,gcc可执行程序的路径是/usr/bin/gcc,那么它在实际工作时指定头文件头径是一种相对路径方法,换算成绝对路径