log4net 일기 파일 경로 동적 설정

10633 단어 log
프로젝트 개발 과정에서 배치된 서버가 갈수록 많아지고 일기를 볼 때 모든 서버가 일기를 찾아야 하는데 이것은 운영자들에게 매우 불친절한 방식이다.이를 바탕으로 모든 일기를 한 서버에 통일하여 보관하고 일기가 생성된 서버에 따라 폴더를 나눈다.이럴 때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

좋은 웹페이지 즐겨찾기