关于使用log4net的问题

MYsce 2017-12-02 12:12:48
我用log4net 能生成日志文件,但是这个文件里面什么内容也没有,调试下能捕捉到错误信息,但是就是不能输出到文件里,文件是空的,我用mvc在global输出日志文件

log4net>

Define some output appenders

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="test.txt"/>
<appendToFile value="true"/>
<maxSizeRollBackups value="10"/>
<maximumFileSize value="1024KB"/>
<rollingStyle value="Size"/>
<staticLogFileName value="true"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>


以下是mvc 的global文件里的代码
log4net.Config.XmlConfigurator.Configure(); string logPath = Server.MapPath("/Log");
ThreadPool.QueueUserWorkItem(t =>
{
while (true)
{
if (MyErrorExceptionAttritute.ExceptionQueue.Count > 0)
{
Exception ex = MyErrorExceptionAttritute.ExceptionQueue.Dequeue();
//string fileName = DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
//File.AppendAllText(logPath+"/"+fileName, ex.ToString(),Encoding.Default);
ILog log = LogManager.GetLogger("ErrorMsg");
log.Error(ex.ToString());


}
else
{
Thread.Sleep(3000);
}
}

},logPath);
...全文
247 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanghui0380 2017-12-04
  • 打赏
  • 举报
回复
前面已经说了 ILog log = LogManager.GetLogger("DebugLog"); 这句话不是不是什么取 <appender-ref ref="DebugLog" /> 而是取 <<logger name=DebugLog"> <level value="DEBUG"/> <appender-ref ref="DebugAppender" /> </logger> <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
MYsce 2017-12-02
  • 打赏
  • 举报
回复
引用 5 楼 daixf_csdn 的回复:
我对配置中的root节定义多个level也不是很理解,我刚才测试了下,发现你GetLogger参数中的ErrorMsg,对记录的日志并无影响,相当于这个参数没什么大的用处。 你调用了log.Error [quote=引用 2 楼 daixf_csdn 的回复:] 其次,我的配置文件是这样的:其中的ERROR相当于你的 ErrorMsg 参数
其实文中的ErrorMsg没什么用,因为你用root的配置,并没有配置ErrorMsg的节点,参数ErrorMsg和aaaa也没什么区别,随便传,不影响结果。[/quote] 按你的写法我能生成DEBUG.log文件但是里面什么都没有 测试错误代码
  public ActionResult Index()
        {

            int a = 1;
            int b = 0;
            int c = a / b;
            return View();
        }
配置文件
<log4net>
    <root>
      <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
      <level value="ERROR"/>
      <level value="WARN"/>
      <level value="INFO"/>
      <level value="DEBUG"/>
      <appender-ref ref="ErrorLog" />
      <appender-ref ref="WarnLog" />
      <appender-ref ref="InfoLog" />
      <appender-ref ref="DebugLog" />
    </root>
    <!-- 调试 Debug.log-->
    <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
      <!--目录路径,可以是相对路径或绝对路径-->
      <param name="File" value="App_Data"/>
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--写到一个文件-->
      <staticLogFileName value="false"/>
      <!--单个文件大小。单位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件数,设为"-1"则不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日志格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>
      
    
   
  </log4net>
ILog log = LogManager.GetLogger("DebugLog");
                        log.Debug(ex.ToString());
那么还是没有信息 就算直接 log.Debug("输出测试");也没有信息,是不是级别不够还是?把配置debug 换成all也不行
MYsce 2017-12-02
  • 打赏
  • 举报
回复
引用 6 楼 wanghui0380 的回复:
额,那些都是捕获策略 <root> --指默认所有日志都通过这里记录 <level value="DEBUG"/> ---指只匹配debug等级 <appender-ref ref="ErrorLog" /> 同时把日志记录多播给 另一个叫errrlog的日志管理策策略 比如楼主自己的 <root> <level value="DEBUG"/> <appender-ref ref="RollingLogFileAppender"/> </root> 表示所有默认日志流启用只匹配debug等级记录,同时这些记录使用往文件里添加的管理策略,使用代码里使用 log.error写日志没有效果,他只匹配的debug 至于代码里的ILog log = LogManager.GetLogger("ErrorMsg"),你也获取不到,这句话的意思是获取 <<logger name="ErrorMsg"> </logger> 这配置节,当然楼主没有配置他,使用他无效,同时默认root也只匹配了debug,所以整个ERROR的日志在楼主的配置里根本就没Map过,最终结果也就是error等级日志都被忽略掉了
那么怎样才能配置log4net 呢,这方面有什么资料,网上的资料都不全
wanghui0380 2017-12-02
  • 打赏
  • 举报
回复
额,那些都是捕获策略 <root> --指默认所有日志都通过这里记录 <level value="DEBUG"/> ---指只匹配debug等级 <appender-ref ref="ErrorLog" /> 同时把日志记录多播给 另一个叫errrlog的日志管理策策略 比如楼主自己的 <root> <level value="DEBUG"/> <appender-ref ref="RollingLogFileAppender"/> </root> 表示所有默认日志流启用只匹配debug等级记录,同时这些记录使用往文件里添加的管理策略,使用代码里使用 log.error写日志没有效果,他只匹配的debug 至于代码里的ILog log = LogManager.GetLogger("ErrorMsg"),你也获取不到,这句话的意思是获取 <<logger name="ErrorMsg"> </logger> 这配置节,当然楼主没有配置他,使用他无效,同时默认root也只匹配了debug,所以整个ERROR的日志在楼主的配置里根本就没Map过,最终结果也就是error等级日志都被忽略掉了
圣殿骑士18 2017-12-02
  • 打赏
  • 举报
回复
我对配置中的root节定义多个level也不是很理解,我刚才测试了下,发现你GetLogger参数中的ErrorMsg,对记录的日志并无影响,相当于这个参数没什么大的用处。 你调用了log.Error
引用 2 楼 daixf_csdn 的回复:
其次,我的配置文件是这样的:其中的ERROR相当于你的 ErrorMsg 参数
其实文中的ErrorMsg没什么用,因为你用root的配置,并没有配置ErrorMsg的节点,参数ErrorMsg和aaaa也没什么区别,随便传,不影响结果。
wanghui0380 2017-12-02
  • 打赏
  • 举报
回复
<level value="DEBUG"/> //r你说只要root,没有其他的,而且只有debug等级 ILog log = LogManager.GetLogger("ErrorMsg"); //你收你要errmsg日志,不过你配置里有么? log.Error(ex.ToString()); //你前面说了只要debug,现在你写了error,然后抱怨人家没有把error等级的记录进去??
圣殿骑士18 2017-12-02
  • 打赏
  • 举报
回复
log4net完整内容:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <!--根配置-->
    <root>
      <!--日志级别:可选值: ERROR > WARN > INFO > DEBUG -->
      <level value="ERROR"/>
      <level value="WARN"/>
      <level value="INFO"/>
      <level value="DEBUG"/>
      <appender-ref ref="ErrorLog" />
      <appender-ref ref="WarnLog" />
      <appender-ref ref="InfoLog" />
      <appender-ref ref="DebugLog" />
    </root>
    <!-- 错误 Error.log-->
    <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender">
      <!--目录路径,可以是相对路径或绝对路径-->
      <param name="File" value="log"/>
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM-dd/"Error.log""/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--写到一个文件-->
      <staticLogFileName value="false"/>
      <!--单个文件大小。单位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件数,设为"-1"则不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日志格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="ERROR" />
        <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>

    <!-- 警告 Warn.log-->
    <appender name="WarnLog" type="log4net.Appender.RollingFileAppender">
      <!--目录路径,可以是相对路径或绝对路径-->
      <param name="File" value="log"/>
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM-dd/"Warn.log""/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--写到一个文件-->
      <staticLogFileName value="false"/>
      <!--单个文件大小。单位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件数,设为"-1"则不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日志格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN" />
        <param name="LevelMax" value="WARN" />
      </filter>
    </appender>

    <!-- 信息 Info.log-->
    <appender name="InfoLog" type="log4net.Appender.RollingFileAppender">
      <!--目录路径,可以是相对路径或绝对路径-->
      <param name="File" value="log"/>
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM-dd/"Info.log""/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--写到一个文件-->
      <staticLogFileName value="false"/>
      <!--单个文件大小。单位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件数,设为"-1"则不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日志格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="INFO" />
        <param name="LevelMax" value="INFO" />
      </filter>
    </appender>

    <!-- 调试 Debug.log-->
    <appender name="DebugLog" type="log4net.Appender.RollingFileAppender">
      <!--目录路径,可以是相对路径或绝对路径-->
      <param name="File" value="log"/>
      <!--文件名,按日期生成文件夹-->
      <param name="DatePattern" value="/yyyy-MM-dd/"Debug.log""/>
      <!--追加到文件-->
      <appendToFile value="true"/>
      <!--创建日志文件的方式,可选值:Date[日期],文件大小[Size],混合[Composite]-->
      <rollingStyle value="Composite"/>
      <!--写到一个文件-->
      <staticLogFileName value="false"/>
      <!--单个文件大小。单位:KB|MB|GB-->
      <maximumFileSize value="200MB"/>
      <!--最多保留的文件数,设为"-1"则不限-->
      <maxSizeRollBackups value="-1"/>
      <!--日志格式-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="DEBUG" />
        <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>


  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
</configuration>
圣殿骑士18 2017-12-02
  • 打赏
  • 举报
回复
其次,我的配置文件是这样的:其中的ERROR相当于你的 ErrorMsg 参数
圣殿骑士18 2017-12-02
  • 打赏
  • 举报
回复
首先不知道你的 log4net.Config.XmlConfigurator.Configure() 有没有问题,因为没指定配置文件参数,我的写法是:
static LogFactory()
        {
            FileInfo configFile = null;
            //兼容BS和CS环境
            if (HttpContext.Current == null)
            {
                configFile = new FileInfo(Path.Combine(baseDirectory, "Configs/log4net.config"));
            }
            else
            {
                configFile = new FileInfo(HttpContext.Current.Server.MapPath("/Configs/log4net.config"));
            }
            log4net.Config.XmlConfigurator.Configure(configFile);
        }

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧