Windows Service Logger日志文件配置:
首先,添加程序包log4net
配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<connectionStrings>
//这个地方用于配置连接数据库字符串,如:
// <add name="shj_webEntities" connectionString="metadata=res://*/Dao.DataBase.csdl|res://*/Dao.DataBase.ssdl|res://*/Dao.DataBase.msl;provider=System.Data.SqlClient;provider connection string=" data source=.;initial catalog=shj_web_test;user id=sa;Password=123qwe!@#;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient"/>
</connectionStrings>
<log4net>
<appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logs/Errors/Error-" />
<datePattern value="yyyy-MM-dd'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [NDC:%ndc] - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="Logs/Log-" />
<datePattern value="yyyy-MM-dd'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [NDC:%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="All" />
<!--文件形式记录日志-->
<appender-ref ref="RollingFileAppender" />
</root>
<logger name="ErrorLogger">
<level value="ERROR" />
<appender-ref ref="ErrorFileAppender" />
</logger>
<logger name="InfoLogger">
<level value="All" />
<appender-ref ref="RollingFileAppender" />
</logger>
</log4net>
<appSettings>
//这个地方主要配置一些键值,不需要则不用写
<add key="SleepTime" value="5"/>
</appSettings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="log4net" publicKeyToken="669e0ddf0bb1aa2a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.8.0" newVersion="2.0.8.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="ICSharpCode.SharpZipLib" publicKeyToken="1b03e6acf1164f73" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.2.0.246" newVersion="1.2.0.246" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
配置文件写好以后,此时还不能生成日志文件,需要在主程序进入的地方加一句:
var l4ncfg = log4net.Config.XmlConfigurator.Configure();
现在,可以打印日志文件了。
Logger.Write("测试日志文件打出!");
Logger.cs
/// <summary>
/// Logger work with log4net.Error().
/// </summary>
public static class Logger
{
/// <summary>
/// Get Logger by type.
/// </summary>
/// <param name="type">Impl Type</param>
/// <param name="defaultLogger">Default Logger if got no logger by type, default is InfoLogger</param>
/// <param name="logModule">Log module name, default is "common"</param>
/// <returns>ILog</returns>
public static ILog GetLogger(Type type = null, string defaultLogger = "InfoLogger", string logModule = "")
{
ILog logger;
if (type == null)
{
logger = LogManager.GetLogger(defaultLogger);
}
else
{
logger = LogManager.GetLogger(type);
}
if (logger == null)
{
logger = LogManager.GetLogger(System.Reflection.MethodInfo.GetCurrentMethod().DeclaringType);
}
//log4net.LogicalThreadContext.Properties["logModule"] = logModule;
//log4net.Config.XmlConfigurator.Configure();
return logger;
}
/// <summary>
/// Write Exception
/// </summary>
/// <param name="ex">Exception</param>
public static void Write(Exception ex)
{
var log = GetLogger(defaultLogger: "ErrorLogger");
log.Error("Error", ex);
}
/// <summary>
/// Write Exception with definition type.
/// </summary>
/// <param name="t">Definition type</param>
/// <param name="ex">Exception</param>
public static void Write(Type t, Exception ex)
{
var log = GetLogger(t, "ErrorLogger");
log.Error("Error", ex);
}
/// <summary>
/// Write message.
/// </summary>
/// <param name="message">Message</param>
public static void Write(string message)
{
var log = GetLogger();
log.Info(message);
}
/// <summary>
/// Write message with definition type.
/// </summary>
/// <param name="t">Definition type</param>
/// <param name="message">Message</param>
public static void Write(Type t, string message)
{
var log = GetLogger(t);
log.Info(message);
}
}