无法使用log4net在不同的-2文件中写入日志 [英] Unable to write log using log4net in different-2 file

查看:63
本文介绍了无法使用log4net在不同的-2文件中写入日志的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用log4net写日志,我正在写异常和信息的seprate文件。

但是当我写任何异常时它正在两个文件中写入。它应该只在Error文件中记录而不是在两个文件中

下面是我的配置文件:

 <   configSections  >  
< 部分 名称 = log4net type = log4net.Config.Log4NetConfigurationSectionHandler,log4net / >
< / configSections >

< log4net debug = true >
< appender name = RollingLogFileAppender 类型 = log4net.Appender.RollingFileAppender >
< file value = 。\ Log\ChatLog.log / >
< appendToFile < span class =code-attribute> value = true / >
< lockingModel type = log4net.Appender.FileAppender + MinimalLock / >
< rollingStyle value = 大小 / >
< maxSizeRollBackups value = 10 / >
< maximumFileSize = 10MB / >
< staticLogFileName value = true / >
< layout type = log4net.Layout.PatternLayout >
< filter type = log4net.Filter.LevelRangeFilter >
< levelMin value = INFO / >
< levelMin value = DEBUG / >
< / filter >
< < span class =code-leadattribute> conversionPattern value = %level%username%message%newline / >
< / layout >
< / appender >

< appender name = RollingErrorLogFileAppender type = log4net.Appender.RollingFileAppender >
< file value = 。 \\\\\ [LogLog.log / >
< appendToFile value = true / >
< lockingModel type = log4net.Appender.FileAppender + MinimalLock / >
< rollingStyle value = 大小 / >
< maxSizeRollBackups value = 10 / >
< maximumFileSize value = 10MB / >
< staticLogFileName value = true / >
< 布局 type = log4net.Layout.PatternLayout < span class =code-keyword>>
< 过滤器 type = log4net.Filter.LevelRangeFilter >
< levelMin value = ERROR / >
< levelMin value = 警告 / >
< levelMax value = 致命 / >
< / filter >
< conversionPattern = %date [%thread]%level%logger - %message%newline / >
< / layout >
< / appender >
< root >
< level value = DEBUG / >
< appender-ref ref = RollingLogFileAppender / >
< appender-ref ref = RollingErrorLogFileAppender / >
< / root >
< / log4net >





---- --------------背后的CODE是---------------

 < span class =code-keyword> public   static   class  ChatLogger 
{
/// < 摘要 >
/// 日志类型的枚举
/// < / summary >
public enum LoggerType
{
错误日志,
调试日志,
Warninglog ,
Infolog,
Fatellog
}
私人 静态 readonly ILog chatlog = LogManager.GetLogger( RollingLogFileAppender);
private static readonly ILog errorlogs = LogManager.GetLogger( RollingErrorLogFileAppender);
/// < 摘要 >
/// 记录
的主要方法
/// < / summary >
/// < param name =logMsg < span class =code-summarycomment>> 日志消息< / param <跨度 class =code-summarycomment>>
/// < span class =code-summarycomment>< param name =logType > 日志类型< / param >
public static async 任务WriteLog( string logMsg, string logType)
{
try
{
if (Convert.ToBoolean(ConfigurationManager.AppSettings [ < span class =code-string> IsLogEnabled]。Trim()))
{
log4net.Config.XmlConfigurator.Configure( new FileInfo(HttpContext.Current.Server.MapPath( 〜/ Web.config) )); // 网络版
开关(logType)
{
case Debuglog
await Task.Run(()= > chatlog.Debug(logMsg));
break ;
case 错误日志
string errorlog = logMsg.Length > 500 ? logMsg.Substring( 0 500 ):logMsg;
await Task.Run(()= > errorlogs.Error(errorlog));
break ;
case Warninglog
string warnlog = logMsg.Length > 500 ? logMsg.Substring( 0 500 ):logMsg;
await Task.Run(()= > chatlog.Warn(warnlog));
break ;
case Infolog
await Task.Run(()= > chatlog.Info(logMsg)) ;
break ;
case Fatellog
string fatallog = logMsg.Length > 500 ? logMsg.Substring( 0 500 ):logMsg;
await Task.Run(()= > chatlog.Fatal(fatallog));
break ;
}
}
}
catch (例外情况)
{
await Task.Run(()= > chatlog.Error(ex.StackTrace.Length > 500 ?ex.StackTrace.Substring( 0 500 ):ex.StackTrace));
}
}



---------------

请告知我错过了什么设置或代码。

谢谢

Sudheer



我尝试过什么:



i尝试了所有设置。

请告诉我我缺少的设置或代码。

解决方案

你必须为你的追加者添加一个阈值



 <   appender     name   =  ErrorAppender   类型  =  log4net.Appender.RollingFileAppender >  
< file type = log4net.Util.PatternString value = %property {logPath} \ Error.txt / >
< appendToFile value = true / >
< rollingStyle value = Composite / >
< datePattern value = '_'yyyy.MM.dd'.txt ' / >
< maxSizeRollBackups value = - 1 / >
<
maximumFileSize value = 10MB / >
< layout type = log4net.Layout.PatternLayout >
< conversionPattern value = [%date](ID:% 3thread) - %-5level%logger:%message%newline / >
< / layout >
< threshold value = 错误 / >
< lockingModel type = log4net.Appender.FileAppender + MinimalLock / >
< / appender >


I am writting log using log4net and i am writting seprate file for exception and info.
But when i am writing any exception It's writting in both file. it should log only in Error file not in both file
Below is my configuration file :

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\Log\ChatLog.log" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="INFO" />
          <levelMin value="DEBUG" />
        </filter>
        <conversionPattern value="%level %username %message%newline" />
      </layout>
    </appender>

    <appender name="RollingErrorLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value=".\Log\ErrorLog.log" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="10MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <filter type="log4net.Filter.LevelRangeFilter">
          <levelMin value="ERROR" />
          <levelMin value="WARNING" />
          <levelMax value="FATAL" />
        </filter>
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="DEBUG" />
      <appender-ref ref="RollingLogFileAppender" />
      <appender-ref ref="RollingErrorLogFileAppender" />
    </root>
  </log4net>



------------------ And COde behind is ---------------

public static class ChatLogger
    {
        /// <summary>
        /// Enum for Log Type
        /// </summary>
        public enum LoggerType
        {
            Errorlog,
            Debuglog,
            Warninglog,
            Infolog,
            Fatellog
        }
        private static readonly ILog chatlog = LogManager.GetLogger("RollingLogFileAppender");
        private static readonly ILog errorlogs = LogManager.GetLogger("RollingErrorLogFileAppender");
        /// <summary>
        /// main method to log
        /// </summary>
        /// <param name="logMsg">log message</param>
        /// <param name="logType">log type</param>
        public static async Task WriteLog(string logMsg, string logType)
        {
            try
            {
                if (Convert.ToBoolean(ConfigurationManager.AppSettings["IsLogEnabled"].Trim()))
                {
                    log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config")));  // Web version
                    switch (logType)
                    {
                        case "Debuglog":
                            await Task.Run(() => chatlog.Debug(logMsg));
                            break;
                        case "Errorlog":
                            string errorlog = logMsg.Length > 500 ? logMsg.Substring(0, 500) : logMsg;
                            await Task.Run(() => errorlogs.Error(errorlog));
                            break;
                        case "Warninglog":
                            string warnlog = logMsg.Length > 500 ? logMsg.Substring(0, 500) : logMsg;
                            await Task.Run(() => chatlog.Warn(warnlog));
                            break;
                        case "Infolog":
                            await Task.Run(() => chatlog.Info(logMsg));
                            break;
                        case "Fatellog":
                            string fatallog = logMsg.Length > 500 ? logMsg.Substring(0, 500) : logMsg;
                            await Task.Run(() => chatlog.Fatal(fatallog));
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                await Task.Run(() => chatlog.Error(ex.StackTrace.Length > 500 ? ex.StackTrace.Substring(0, 500) : ex.StackTrace));
            }
        }


---------------
Please tell me what setting or code i am missing.
Thanks
Sudheer

What I have tried:

i have tried all setting .

Please tell me what setting or code i am missing.

解决方案

You have to add a threshold value to your appender

<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="%property{logPath}\Error.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Composite" />
    <datePattern value="'_'yyyy.MM.dd'.txt'" />
    <maxSizeRollBackups value="-1" />
    <maximumFileSize value="10MB" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] (ID: %3thread) - %-5level %logger: %message%newline" />
    </layout>
    <threshold value="ERROR" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
</appender>


这篇关于无法使用log4net在不同的-2文件中写入日志的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆