C# log4net 不输出日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一个新项目,直接用了一些之前的代码,突然跟踪不到日志了。检查发现了原因,特在此记录。 

log4net的配置文件log4net_config.xml 

复制代码

<?xml version="1.0" encoding="utf-8" ?>

<log4net>

<appender name="TastInfo" type="log4net.Appender.RollingFileAppender">

<file value="Log\\Info\\" />

<appendToFile value="true" />

<rollingStyle value="Composite" />

<maxSizeRollBackups value="-1" />

<maximumFileSize value="1MB" />

<staticLogFileName value="false" />

<DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date %-5level - %message%newline" />

</layout>

</appender>

<appender name="TastError" type="log4net.Appender.RollingFileAppender">

<file value="log\\Error\\" />

<appendToFile value="true" />

<rollingStyle value="Composite" />

<maxSizeRollBackups value="-1" />

<maximumFileSize value="1MB" />

<staticLogFileName value="false" />

<DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date %-5level - %message%newline" />

</layout>

</appender>

<appender name="TastDebug" type="log4net.Appender.RollingFileAppender">

<file value="log\\Debug\\" />

<appendToFile value="true" />

<rollingStyle value="Composite" />

<maxSizeRollBackups value="-1" />

<maximumFileSize value="1MB" />

<staticLogFileName value="false" />

<DatePattern value="yyyy-MM-dd&quot;.txt&quot;"/>

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%date %-5level - %message%newline" />

</layout>

</appender>

<logger name="Info">

<level value="ALL"/>

<appender-ref ref="Info" />

<appender-ref ref="TastInfo" />

</logger>

<logger name="Error">

<level value="ALL"/>

<appender-ref ref="Error" />

<appender-ref ref="TastError" />

</logger>

<logger name="Debug">

<level value="ALL"/>

<appender-ref ref="Debug" />

<appender-ref ref="TastDebug" />

</logger>

</log4net>

复制代码

log4net的应用错误代码:

复制代码

public class Log

{

private static string DefaultName = "log";

 

static Log()

{

string path = AppDomain.CurrentDomain.BaseDirectory + @"\log4net_config.xml";

log4net.Config.XmlConfigurator.Configure(new FileInfo(path));

}

 

public static log4net.ILog GetLog(string logName)

{

log4net.ILog log = log4net.LogManager.GetLogger(logName);

return log;

}

 

public static void debug(string message)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsDebugEnabled)

log.Debug(message);

 

log = null;

}

 

public static void debug(string message, Exception ex)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsDebugEnabled)

log.Debug(message, ex);

 

log = null;

}

 

public static void error(string message)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsErrorEnabled)

log.Error(message);

 

log = null;

}

 

public static void error(string message, Exception ex)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsErrorEnabled)

log.Error(message, ex);

 

log = null;

}

 

public static void fatal(string message)

{

 

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsFatalEnabled)

log.Fatal(message);

 

log = null;

}

 

public static void info(string message)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsInfoEnabled)

log.Info(message);

 

log = null;

}

 

public static void warn(string message)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsWarnEnabled)

log.Warn(message);

 

log = null;

}

}

复制代码

不输出日志的原因是因为, 默认private static string DefaultName = "log",在配置文件里面找不到对应的节点值。

正确的应用代码:

复制代码

public class Log

{

private const string SError = "Error";

private const string SDebug = "Debug";

private const string DefaultName = "Info";

 

static Log()

{

var path = AppDomain.CurrentDomain.BaseDirectory + @"\log4net_config.xml";

log4net.Config.XmlConfigurator.Configure(new FileInfo(path));

}

 

public static log4net.ILog GetLog(string logName)

{

var log = log4net.LogManager.GetLogger(logName);

return log;

}

 

public static void Debug(string message)

{

var log = log4net.LogManager.GetLogger(SDebug);

if (log.IsDebugEnabled)

log.Debug(message);

}

 

public static void Debug(string message, Exception ex)

{

var log = log4net.LogManager.GetLogger(SDebug);

if (log.IsDebugEnabled)

log.Debug(message, ex);

}

 

public static void Error(string message)

{

var log = log4net.LogManager.GetLogger(SError);

if (log.IsErrorEnabled)

log.Error(message);

}

 

public static void Error(string message, Exception ex)

{

var log = log4net.LogManager.GetLogger(SError);

if (log.IsErrorEnabled)

log.Error(message, ex);

}

 

public static void Fatal(string message)

{

var log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsFatalEnabled)

log.Fatal(message);

}

 

public static void Info(string message)

{

log4net.ILog log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsInfoEnabled)

log.Info(message);

}

 

public static void Warn(string message)

{

var log = log4net.LogManager.GetLogger(DefaultName);

if (log.IsWarnEnabled)

log.Warn(message);

}

}

复制代码
总结: log4net.LogManager.GetLogger(Name),这里面的Name要在配置文件中,有对应的节点值。
本文转自左正博客园博客,原文链接:http://www.cnblogs.com/soundcode/p/4861438.html ,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
24天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
173 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
16天前
|
Java 物联网 C#
C#/.NET/.NET Core学习路线集合,学习不迷路!
C#/.NET/.NET Core学习路线集合,学习不迷路!
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
256 3
|
20天前
|
Java 物联网 编译器
C#一分钟浅谈:.NET Core 与 .NET 5 区别
本文对比了 .NET Core 和 .NET 5,从历史背景、主要区别、常见问题及易错点等方面进行了详细分析。.NET Core 侧重跨平台支持和高性能,而 .NET 5 在此基础上统一了 .NET 生态系统,增加了更多新特性和优化。开发者可根据具体需求选择合适的版本。
42 7
|
16天前
|
人工智能 开发框架 前端开发
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
C#/.NET/.NET Core技术前沿周刊 | 第 12 期(2024年11.01-11.10)
|
16天前
|
开发框架 网络协议 .NET
C#/.NET/.NET Core优秀项目和框架2024年10月简报
C#/.NET/.NET Core优秀项目和框架2024年10月简报
|
15天前
|
人工智能 开发框架 安全
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
C#/.NET/.NET Core技术前沿周刊 | 第 13 期(2024年11.11-11.17)
|
16天前
|
网络协议 Unix Linux
精选2款C#/.NET开源且功能强大的网络通信框架
精选2款C#/.NET开源且功能强大的网络通信框架
|
16天前
|
程序员 C# 图形学
全面的C#/.NET自学入门指南
全面的C#/.NET自学入门指南
|
2月前
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
37 1