Comm层
通过nuget 下载安装log4net、Newtonsoft.Json、QRCoder
1.配置日志Logger
需要在CoreApi_LayWeb层添加log4net.config配置文件,在Startup.cs中添加相关配置
log4net.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<!-- Debug 将日志以回滚文件的形式写到文件中 -->
<appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Log\\Debug\\" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<param name="MaxFileSize" value="10240"/>
<param name="MaxSizeRollBackups" value="100"/>
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="yyyy-MM-dd".log"" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【异常时间】:%date【线程ID】:%thread%newline【异常级别】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Debug" />
<param name="LevelMax" value="Debug" />
</filter>
</appender>
<!-- Info 将日志以回滚文件的形式写到文件中 -->
<appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Log\\Info\\" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<param name="MaxFileSize" value="10240"/>
<param name="MaxSizeRollBackups" value="100"/>
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="yyyy-MM-dd".log"" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【异常时间】:%date【线程ID】:%thread%newline【异常级别】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Info" />
<param name="LevelMax" value="Info" />
</filter>
</appender>
<!-- Error 将日志以回滚文件的形式写到文件中 -->
<appender name="RollingFileError" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Log\\Error\\" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<param name="MaxFileSize" value="10240"/>
<param name="MaxSizeRollBackups" value="100"/>
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="yyyy-MM-dd".log"" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="【异常时间】:%date【线程ID】:%thread%newline【异常级别】:%5level%newline%message%newline--------------------------------------------------------------------%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="Error" />
<param name="LevelMax" value="Error" />
</filter>
</appender>
<logger name="RollingLogFileAppender">
<level value="ALL" />
<appender-ref ref="RollingFileDebug" />
<appender-ref ref="RollingFileInfo" />
<appender-ref ref="RollingFileError" />
</logger>
<!--<root>
控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录
如果没有定义LEVEL的值,则缺省为DEBUG
<level value="ALL" />
按日期切分日志文件,并将日期作为日志文件的名字
<appender-ref ref="RollingFileAppenderNameByDate" />
</root>-->
</log4net>
</configuration>
Startup.cs关于日志配置:
public static ILoggerRepository repository { get; set; }
public Startup(IConfiguration configuration)
{
Configuration = configuration;
repository = LogManager.CreateRepository("CoreApi");
XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
}
记录日志公共方法:
Logger.cs
public class Logger
{
private static ILog logger;
static Logger()
{
logger = LogManager.GetLogger("CoreApi", "RollingLogFileAppender");
}
/// <summary>
/// 调试信息
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Debug(string message, Exception exception = null)
{
if (logger.IsDebugEnabled)
{
if (exception == null)
logger.Debug(message);
else
logger.Debug(FormartLog(message, exception));
}
}
/// <summary>
/// 一般信息
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Info(string message, Exception exception = null)
{
if (logger.IsInfoEnabled)
{
if (exception == null)
logger.Info(message);
else
logger.Info(FormartLog(message, exception));
}
}
/// <summary>
/// 错误
/// </summary>
/// <param name="message"></param>
/// <param name="exception"></param>
public static void Error(string message, Exception exception = null)
{
if (logger.IsErrorEnabled)
{
if (exception == null)
logger.Error(message);
else
logger.Error(FormartLog(message, exception));
}
}
/// <summary>
/// 自定义返回格式
/// </summary>
/// <param name="throwMsg"></param>
/// <param name="ex"></param>
/// <returns></returns>
private static string FormartLog(string throwMsg, Exception ex)
{
return string.Format("【自定义内容】:{0} \r\n【异常类型】:{1} \r\n【异常信息】:{2} \r\n【堆栈调用】:{3}", new object[] { throwMsg, ex.GetType().Name, ex.Message, ex.StackTrace });
}
}
2.读取配置信息appsetting.json类:
ReadConfig.cs
public class ReadConfig
{
private static string _SqlServerConfig = "";
/// <summary>
/// sqlserver连接地址
/// </summary>
public static string SqlServerConfig
{
get
{
if (string.IsNullOrEmpty(_SqlServerConfig))
{
_SqlServerConfig = Configuration.GetConnectionString("SqlServerConnection");
}
return _SqlServerConfig;
}
}
public static string Uploader
{
get
{
return Configuration.GetConnectionString("uploader");
}
}
/// <summary>
/// Redis连接字符
/// </summary>
public static string RedisConfig
{
get
{
return Configuration.GetConnectionString("RedisConfig");
}
}
public static IConfiguration Configuration { get; set; }
static ReadConfig()
{
//ReloadOnChange = true 当appsettings.json被修改时重新加载
Configuration = new ConfigurationBuilder()
.Add(new JsonConfigurationSource { Path = "appsettings.json", ReloadOnChange = true })
.Build();
}
/// <summary>
/// 人员相关文件
/// </summary>
public static string EmployeeFilePath
{
get
{
return Configuration.GetConnectionString("EmployeeFilePath");
}
}
}
3.公共类:
Utils.cs 主要方法:根据日期查询周天、MD5加密、生成制定位数的随机码(数字)、身份证号验证、 手机号校验、Json序列化与反序列化、生成二维码等