声明:本文所述方法的前提是要首先在项目中添加下列两个引用
在本地生成单个日志文件
直接在配置文件中添加下列代码即可
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="E:\Logs\MESLog\" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] %-5level %logger %message%newline" />
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
注意:<configSections>节点必须位于<configuration>节点下的第一个位置
在程序中具体使用时要在构造方法或者起始main()方法中对配置文件进行引用
log4net.Config.XmlConfigurator.Configure();
完成之后,在所要添加日志的类中实例化CasaLog
类就可以了
代码如下:
public static CascLog _log = new CascLog("Datalog");
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure();
_log.Info("this is a log!");
}
在本地生成不同的文件夹日志
- 首先在配置文件中加入如下代码
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="E:\Logs\DataLog\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd'.txt'"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] %-5level %logger %message%newline"/>
</layout>
<filter type = "log4net.Filter.LoggerMatchFilter">
<loggerToMatch value = "DataLog"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
</appender>
<appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
<file value="E:\Logs\ErrorLog\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd'.txt'"/>
<staticLogFileName value="false"/>
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] %-5level %logger %message%newline"/>
</layout>
<filter type = "log4net.Filter.LoggerMatchFilter">
<loggerToMatch value = "ErrorLog"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="RollingLogFileAppender"/>
<appender-ref ref="ErrorLogAppender"/>
</root>
</log4net>
- 之后在程序中做如下操作
class Program
{
public static CascLog _log;
public static CascLog errorlog;
static void Main(string[] args)
{
log4net.Config.XmlConfigurator.Configure();
Testlog();
_log.Info("test");
errorlog.Error("hahah");
}
public static void Testlog()
{
_log = new CascLog("DataLog");
errorlog = new CascLog("ErrorLog");
}
}
其中实例化中括号内的参数 DataLog和ErrorLog 对应配置文件中的<loggerToMatch value = "DataLog"/>和<loggerToMatch value = "ErrorLog"/>
-
程序运行后本地生成日志文件的效果如图
log文件夹
继承关系类的日志生成方法
举例说明
- ShellStorageManager类继承StorageManager类
public class ShellStorageManager : StorageManager
{
public static CascLog shelllog = new CascLog("shellLog");
public ShellStorageManager() : base(shelllog)
{
...
}
}
- SubstrateStorageManager类继承StorageManager类
public class SubstrateStorageManager : StorageManager
{
public static CascLog sublog = new CascLog("subLog");
public SubstrateStorageManager() : base(sublog)
{
...
}
}
- 配置文件配置如下
<log4net>
<appender name="ShellLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\Logs\ShellLog\" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] %-5level %logger %message%newline" />
</layout>
<filter type = "log4net.Filter.LoggerMatchFilter">
<loggerToMatch value = "shellLog"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
</appender>
<appender name="SubLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\Logs\SubLog\" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<datePattern value="yyyyMMdd'.txt'" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="%date [%thread] %-5level %logger %message%newline" />
</layout>
<filter type = "log4net.Filter.LoggerMatchFilter">
<loggerToMatch value = "subLog"/>
</filter>
<filter type="log4net.Filter.DenyAllFilter"/>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="ShellLogFileAppender" />
<appender-ref ref="SubLogFileAppender" />
</root>
</log4net>
- StorageManager类
public CascLog _log;
public StorageManager(CascLog log)
{
OpcClient = new OpcHelper();
_taskCtrl = new TaskTrackingController();
StopServiceFlag = false;
_log = log;
}
总结
两个类A和B继承类C,添加日志时要对两个类进行分开记录,但此时父类C中的日志如何处理呢?可以通过如上方法,在两个类中通过构造方法传入各自的loggerToMatch value标识值,在父类C中获取到此值,并将其赋给其定义的log引用(_log)即可,这样就可以在父类中完美的区分两个子类的日志记录了。