demo地址:ABP.WindowsService

该文章是系列文章 基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业 的其中一篇。

参考:https://aspnetboilerplate.com/Pages/Documents/Logging

ABP框架使用的是Castle Windsor的日志工具,Castle Windsor定义了日志接口

ILogger,并提供了Log4Net, NLog, Serilog的实现。

首先,nuget添加Abp.Castle.Log4Net,github地址:Abp.Castle.Log4Net

然后,添加AppConfigurations,根据环境变量获取log4net.config的绝对路径,模仿appsettings.json的使用方式。代码如下:

using Abp.Extensions;
using System.Collections.Concurrent;
using System.IO; namespace Demo.MyJob.Configuration
{
public static class AppLog4NetConfigs
{
private static readonly ConcurrentDictionary<string, string> Log4NetConfigCache; static AppLog4NetConfigs()
{
Log4NetConfigCache = new ConcurrentDictionary<string, string>();
} public static void AddProperty(string key, string value)
{
log4net.GlobalContext.Properties[key] = value;
} public static string Get(string path, string environmentName = null)
{
var cacheKey = path + "#" + environmentName; return Log4NetConfigCache.GetOrAdd(
cacheKey,
_ => BuildLog4NetConfig(path, environmentName)
);
} private static string BuildLog4NetConfig(string path, string environmentName = null)
{
var configFile = Path.Combine(path, "log4net.config"); if (environmentName.IsNullOrWhiteSpace())
{
return configFile;
} var tempPath = Path.Combine(path, $"log4net.{environmentName}.config");
if (File.Exists(tempPath))
{
configFile = tempPath;
} return configFile;
}
}
}

最后,先在ConfigureAppConfiguration获取绝对路径,

AppLog4NetConfigs.AddProperty("LogsDirectory", hostingEnvironment.ContentRootPath);
LogConfigFile = AppLog4NetConfigs.Get(hostingEnvironment.ContentRootPath, hostingEnvironment.EnvironmentName);

接着添加日志配置

IocManager.IocContainer.AddFacility<LoggingFacility>(
f => f.UseAbpLog4Net().WithConfig(LogConfigFile)
);

测试一下

在Execute添加日记记录

LogHelper.Logger.Info(nameof(SayHelloJob));

测试ok。

log4net.config参考

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender">
<mapping>
<level value="ERROR" />
<foreColor value="Red" />
</mapping>
<mapping>
<level value="Info" />
<foreColor value="Green" />
</mapping>
<mapping>
<level value="DEBUG" />
<foreColor value="Blue" />
</mapping>
<mapping>
<level value="WARN" />
<foreColor value="Yellow" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{ABSOLUTE} [%thread] %-5p %c{1}:%L - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="Fatal" />
</filter>
</appender>
<appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<file type="log4net.Util.PatternString" value="%property{LogsDirectory}\logs\" />
<datePattern value="'my-windows-service-'dd.MM.yyyy'.log'" />
<staticLogFileName value="false" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="5MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %c - %m%n" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="ManagedColoredConsoleAppender" />
<appender-ref ref="RollingFile" />
</root>
</log4net>
</configuration>

最新文章

  1. A*算法
  2. 【转】让Bootstrap 3兼容IE8浏览器
  3. SCOM Visio监控 与sharepoint 2010 整合
  4. 异步post请求之Block方法
  5. JMeter学习(三十一)Access Log Sampler
  6. mvc+ef+oracle环境中报错:ORA-00001: 违反唯一约束条件
  7. 命令行连接wifi
  8. vs2008 添加与修改模板.
  9. [安卓学习]AndroidManifest.xml文件内容详解
  10. PHP中Content-type的MIME类型大全说明
  11. 逆波兰表达式 java
  12. Direct3D 对X模型载入
  13. CSS中链接文本为图片时的问题(塌陷、对应的图片建立倒角的问题)
  14. Git时光机穿梭之撤销修改
  15. mysql常用的操作
  16. SpringBoot系列: 使用 Swagger 生成 API 文档
  17. centos7搭建vsftpd并启用虚拟用户
  18. PHP判断是手机端还是PC访问
  19. SQL--结构化的查询语言
  20. 【Redis数据库】再有人问你CAP理论是什么,就把这篇文章发给他

热门文章

  1. Java NIO 学习笔记(七)----NIO/IO 的对比和总结
  2. 继承Comparable接口来实现排序
  3. Programming In Lua 第九章
  4. POJ 1966:Cable TV Network(最小点割集)***
  5. HDU 1584:蜘蛛牌(DFS)
  6. C# 中奇妙的函数–6. 五个序列聚合运算(Sum, Average, Min, Max,Aggregate)
  7. 嵊州D2T2 八月惊魂 全排列 next_permutation()
  8. Java底层技术系列文章-hashcode深入理解
  9. python实现DFA模拟程序(附java实现代码)
  10. py+selenium+IE10【IE已停止工作】【已解决】