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。