如何通过log4net将特定类型日志输出至独立日志文件?
支持,具体配置修改如下
log4net完全支持这种按特定日志记录器(对应类型)输出到独立文件的需求,你只需要在现有配置基础上新增专属的Appender和Logger节点即可:
步骤1:新增专属Appender
在<log4net>节点下添加一个新的RollingFileAppender,指定输出到目标日志文件:
<appender name="ExceptionHandlingAppender" type="log4net.Appender.RollingFileAppender"> <file value="logs\WebPortal.ExceptionHandlingMiddleware.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <staticLogFileName value="true" /> <threshold value="ALL" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" /> </layout> </appender>
步骤2:新增专属Logger节点
在<root>节点同级添加logger节点,指定与ExceptionHandlingMiddleware类型匹配的名称(需包含完整命名空间,比如YourNamespace.ExceptionHandlingMiddleware),关联上面的专属Appender,并设置additivity="false"避免日志重复输出到通用文件:
<logger name="YourNamespace.ExceptionHandlingMiddleware" additivity="false"> <level value="ALL" /> <appender-ref ref="ExceptionHandlingAppender" /> </logger>
注意:
name必须和LogManager.GetLogger(typeof(ExceptionHandlingMiddleware))返回的日志记录器名称一致,默认是该类型的完整限定名,不确定的话可以通过log.Logger.Name输出查看。
完整配置示例
修改后的完整配置如下:
<?xml version="1.0" encoding="utf-8"?> <configuration> <log4net> <root> <level value="ALL" /> <appender-ref ref="RollingFileAppender" /> </root> <!-- 原有通用日志Appender --> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logs\WebPortal.API.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <staticLogFileName value="true" /> <threshold value="ALL" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" /> </layout> </appender> <!-- 异常中间件专属日志Appender --> <appender name="ExceptionHandlingAppender" type="log4net.Appender.RollingFileAppender"> <file value="logs\WebPortal.ExceptionHandlingMiddleware.log" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <staticLogFileName value="true" /> <threshold value="ALL" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" /> </layout> </appender> <!-- 异常中间件专属Logger --> <logger name="YourNamespace.ExceptionHandlingMiddleware" additivity="false"> <level value="ALL" /> <appender-ref ref="ExceptionHandlingAppender" /> </logger> </log4net> </configuration>
验证使用
你的日志记录器初始化代码保持不变:
static readonly ILog log = LogManager.GetLogger(typeof(ExceptionHandlingMiddleware));
此时通过这个log输出的所有日志都会单独写入logs\WebPortal.ExceptionHandlingMiddleware.log,不会再出现在通用的WebPortal.API.log中(additivity="false"阻止了日志向上传递到root logger)。
内容的提问来源于stack exchange,提问作者BennoDual
相关产品推荐
相关产品推荐

