欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

使用log4net记录ABP日志

程序员文章站 2023-08-31 14:03:12
demo地址: "ABP.WindowsService" 该文章是系列文章 "基于.NetCore和ABP框架如何让Windows服务执行Quartz定时作业" 的其中一篇。 参考:https://aspnetboilerplate.com/Pages/Documents/Logging ABP框架 ......

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。