log4net未向日志文件或控制台输出任何日志信息求助
控制台应用中使用log4net的配置说明
首先,你提供的log4net配置有部分内容截断了,我先帮你补全成完整可运行的版本,再逐一拆解配置要点和使用步骤:
完整的log4net.config配置文件
<?xml version="1.0"?> <log4net> <!-- 输出日志到本地文件的Appender --> <appender name="FileAppender" type="log4net.Appender.FileAppender"> <file value="log.txt" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <!-- 输出日志到控制台的Appender(补全你截断的部分) --> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> </layout> </appender> <!-- 根日志规则:关联所有Appender并设置日志级别 --> <root> <level value="ALL" /> <appender-ref ref="FileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> </log4net>
关键配置项解析
FileAppender(文件日志):
<file value="log.txt" />:指定日志文件生成在当前程序运行目录下,文件名是log.txt,也可以写绝对路径比如C:\Logs\app.log<appendToFile value="true" />:设为true时新日志会追加到文件末尾,设为false则每次启动程序会清空原有日志重新写入- PatternLayout:定义日志的输出格式,各占位符含义:
%date:日志生成的时间戳[%thread]:输出当前日志所在的线程ID%-5level:日志级别(左对齐占5位,比如DEBUG、INFO)%logger:日志记录器的名称(通常是当前类的类型名)%message:你自定义的日志内容%newline:日志换行
ConsoleAppender(控制台日志):
- 作用是把日志实时输出到控制台窗口,这里复用了文件日志的格式,你也可以单独修改
conversionPattern来区分两种输出的样式(比如给控制台日志加颜色,需要额外配置ConsoleAppender的mapping节点)
- 作用是把日志实时输出到控制台窗口,这里复用了文件日志的格式,你也可以单独修改
根日志节点
<root>:<level value="ALL" />:设置日志的最低记录级别,ALL会记录所有级别(DEBUG、INFO、WARN、ERROR、FATAL),如果只想记录错误及以上日志,可以改成ERROR<appender-ref>:关联上面定义的两个Appender,这样日志会同时输出到文件和控制台
控制台应用中初始化log4net的代码示例
在你的Program.cs入口类中添加以下代码,就能正常使用日志了:
using log4net; using log4net.Config; using System.IO; class Program { // 声明一个日志记录器,绑定当前类 private static readonly ILog _logger = LogManager.GetLogger(typeof(Program)); static void Main(string[] args) { // 加载log4net配置文件 XmlConfigurator.Configure(new FileInfo("log4net.config")); // 测试不同级别的日志输出 _logger.Debug("这是一条调试日志,开发阶段用"); _logger.Info("这是一条普通信息日志,记录流程节点"); _logger.Warn("这是一条警告日志,提醒潜在问题"); _logger.Error("这是一条错误日志,记录程序异常"); _logger.Fatal("这是一条致命错误日志,记录导致程序崩溃的问题"); } }
最后别忘了把log4net.config文件的复制到输出目录属性设置为「如果较新则复制」或「始终复制」,不然程序运行时找不到配置文件。
内容的提问来源于stack exchange,提问作者Slava
相关产品推荐
相关产品推荐

