Commit 888be158 authored by denny's avatar denny

同步代码

parent eb195acc
using System;
using System.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using log4net.Repository;
namespace MilitaryGuaranteeCard
{
/// <summary>
/// 日志
/// </summary>
public class Logger
{
#region LazyLoading
private static readonly Lazy<Logger> Lazy = new Lazy<Logger>(() => new Logger());
public static Logger Instance => Lazy.Value;
#endregion
#region Define
/// <summary>
/// 将消息记录到 log4net 框架中
/// </summary>
private ILog _logger;
/// <summary>
/// 存储库
/// </summary>
private readonly ILoggerRepository _repository;
#endregion
/// <summary>
/// 构造器
/// </summary>
public Logger()
{
// 日志目录
String logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs");
// 手动创建各个子文件夹
string[] subDirectories = { "NormalLogs", "ServiceLogs", "WarnLogs", "ErrorLogs" };
foreach (var subDir in subDirectories)
{
string fullPath = Path.Combine(logDirectory, subDir);
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
}
}
// 获取当前应用程序的log4net日志存储库
_repository = LogManager.CreateRepository("PLA");
// 使用指定的配置文件配置
XmlConfigurator.Configure(_repository, new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config")));
}
#region Methods
/// <summary>
/// 普通日志
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">执行过程中发生的错误</param>
public void NormalLogs(String message, Exception exception)
{
//检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "NormalLogs");
if (exception != null)
{
_logger.Info(message, exception);
}
else
{
_logger.Info(message);
}
}
/// <summary>
/// 服务日志
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">执行过程中发生的错误</param>
public void ServiceLogs(String message, Exception exception)
{
//检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "ServiceLogs");
if (exception != null)
{
_logger.Info(message, exception);
}
else
{
_logger.Info(message);
}
}
/// <summary>
/// 警告日志
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public void WarnLogs(String message, Exception exception)
{
// 检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "WarnLogs");
if (exception!=null)
{
_logger.Warn(message,exception);
}
else
{
_logger.Warn(message);
}
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">执行过程中发生的错误</param>
public void ErrorLogs(String message, Exception exception)
{
//检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "ErrorLogs");
if (exception != null)
{
_logger.Error(message, exception);
}
else
{
_logger.Error(message);
}
}
#endregion
}
using System;
using System.IO;
using System.Reflection;
using log4net;
using log4net.Config;
using log4net.Repository;
namespace MilitaryGuaranteeCard
{
/// <summary>
/// 日志
/// </summary>
public class Logger
{
#region LazyLoading
private static readonly Lazy<Logger> Lazy = new Lazy<Logger>(() => new Logger());
public static Logger Instance => Lazy.Value;
#endregion
#region Define
/// <summary>
/// 将消息记录到 log4net 框架中
/// </summary>
private ILog _logger;
/// <summary>
/// 存储库
/// </summary>
private readonly ILoggerRepository _repository;
#endregion
/// <summary>
/// 构造器
/// </summary>
public Logger()
{
// 日志目录
String logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Logs");
// 手动创建各个子文件夹
string[] subDirectories = { "NormalLogs", "ServiceLogs", "WarnLogs", "ErrorLogs" };
foreach (var subDir in subDirectories)
{
string fullPath = Path.Combine(logDirectory, subDir);
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
}
}
// 获取当前应用程序的log4net日志存储库
_repository = LogManager.CreateRepository("PLA");
// 使用指定的配置文件配置
XmlConfigurator.Configure(_repository, new FileInfo(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log4net.config")));
}
#region Methods
/// <summary>
/// 普通日志
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">执行过程中发生的错误</param>
public void NormalLogs(String message, Exception exception)
{
//检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "NormalLogs");
if (exception != null)
{
_logger.Info(message, exception);
}
else
{
_logger.Info(message);
}
}
/// <summary>
/// 服务日志
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">执行过程中发生的错误</param>
public void ServiceLogs(String message, Exception exception)
{
//检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "ServiceLogs");
if (exception != null)
{
_logger.Info(message, exception);
}
else
{
_logger.Info(message);
}
}
/// <summary>
/// 警告日志
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public void WarnLogs(String message, Exception exception)
{
// 检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "WarnLogs");
if (exception!=null)
{
_logger.Warn(message,exception);
}
else
{
_logger.Warn(message);
}
}
/// <summary>
/// 错误日志
/// </summary>
/// <param name="message">消息</param>
/// <param name="exception">执行过程中发生的错误</param>
public void ErrorLogs(String message, Exception exception)
{
//检索或创建命名记录器
_logger = LogManager.GetLogger(_repository.Name, "ErrorLogs");
if (exception != null)
{
_logger.Error(message, exception);
}
else
{
_logger.Error(message);
}
}
#endregion
}
}
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MilitaryGuaranteeCard
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
namespace MilitaryGuaranteeCard
{
internal static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("MilitaryGuaranteeCard")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("P R C")]
[assembly: AssemblyProduct("MilitaryGuaranteeCard")]
[assembly: AssemblyCopyright("Copyright © P R C 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("ec8375e3-f9f7-4486-b856-d4515b2286a6")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// 有关程序集的一般信息由以下
// 控制。更改这些特性值可修改
// 与程序集关联的信息。
[assembly: AssemblyTitle("MilitaryGuaranteeCard")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("P R C")]
[assembly: AssemblyProduct("MilitaryGuaranteeCard")]
[assembly: AssemblyCopyright("Copyright © P R C 2024")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// 将 ComVisible 设置为 false 会使此程序集中的类型
//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
//请将此类型的 ComVisible 特性设置为 true。
[assembly: ComVisible(false)]
// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
[assembly: Guid("ec8375e3-f9f7-4486-b856-d4515b2286a6")]
// 程序集的版本信息由下列四个值组成:
//
// 主版本
// 次版本
// 生成号
// 修订号
//
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace MilitaryGuaranteeCard.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MilitaryGuaranteeCard.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace MilitaryGuaranteeCard.Properties {
using System;
/// <summary>
/// 一个强类型的资源类,用于查找本地化的字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// 返回此类使用的缓存的 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MilitaryGuaranteeCard.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 重写当前线程的 CurrentUICulture 属性,对
/// 使用此强类型资源类的所有资源查找执行重写。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace MilitaryGuaranteeCard.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行时版本:4.0.30319.42000
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
namespace MilitaryGuaranteeCard.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.12.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
<Settings />
</SettingsFile>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="NormalAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/NormalLogs/" />
<!--编码格式:UTF-8 -->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="ServiceAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/ServiceLogs/" />
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/WarnLogs/" />
<!--编码:UTF-8-->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/ErrorLogs/" />
<!--编码:UTF-8-->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<logger name="NormalLogs">
<level value="ALL" />
<appender-ref ref="NormalAppender" />
</logger>
<logger name="ServiceLogs">
<level value="ALL" />
<appender-ref ref="ServiceAppender" />
</logger>
<logger name="WarnLogs">
<level value="ALL" />
<appender-ref ref="WarnAppender" />
</logger>
<logger name="ErrorLogs">
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</logger>
</log4net>
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<!-- This section contains the log4net configuration settings -->
<log4net>
<appender name="NormalAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/NormalLogs/" />
<!--编码格式:UTF-8 -->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="ServiceAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/ServiceLogs/" />
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="WarnAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/WarnLogs/" />
<!--编码:UTF-8-->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
<!--日志文件路径,会自动创建-->
<file value="Logs/ErrorLogs/" />
<!--编码:UTF-8-->
<param name="Encoding" value="utf-8" />
<!--是否是向文件中追加日志-->
<param name="AppendToFile" value="true" />
<!--log备份文件最大数量,超过设置数量会滚动覆盖之前的日志-->
<param name="MaxSizeRollBackups" value="5" />
<!--最大文件大小(KB/MB/GB)-->
<param name="MaximumFileSize" value="1GB" />
<!--日志文件名是否是固定不变的-->
<param name="StaticLogFileName" value="false" />
<!--日志文件名格式为:2018-08-31.log-->
<datePattern value="yyyy-MM-dd'.log'" />
<!--日志滚动方式:混合方式(文件大小和日期)-->
<param name="RollingStyle" value="Composite" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default level -->
<logger name="NormalLogs">
<level value="ALL" />
<appender-ref ref="NormalAppender" />
</logger>
<logger name="ServiceLogs">
<level value="ALL" />
<appender-ref ref="ServiceAppender" />
</logger>
<logger name="WarnLogs">
<level value="ALL" />
<appender-ref ref="WarnAppender" />
</logger>
<logger name="ErrorLogs">
<level value="ALL" />
<appender-ref ref="ErrorAppender" />
</logger>
</log4net>
</configuration>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClosedXML" version="0.64.0" targetFramework="net40" />
<package id="DocumentFormat.OpenXml" version="1.0" targetFramework="net40" />
<package id="log4net" version="2.0.17" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net40" />
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="ClosedXML" version="0.64.0" targetFramework="net40" />
<package id="DocumentFormat.OpenXml" version="1.0" targetFramework="net40" />
<package id="log4net" version="2.0.17" targetFramework="net40" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net40" />
</packages>
\ No newline at end of file

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35506.116
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MilitaryGuaranteeCard", "MilitaryGuaranteeCard\MilitaryGuaranteeCard.csproj", "{EC8375E3-F9F7-4486-B856-D4515B2286A6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.12.35506.116
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MilitaryGuaranteeCard", "MilitaryGuaranteeCard\MilitaryGuaranteeCard.csproj", "{EC8375E3-F9F7-4486-B856-D4515B2286A6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{EC8375E3-F9F7-4486-B856-D4515B2286A6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment