ABP Vnext SeriLog如何保存日志到Oracle

1、安装包"SeriLog.Sinks.Oracle(1.1.1)"

在这里插入图片描述

2、在Program类的主方法里添加如下配置

    public static async Task<int> Main(string[] args)
    {
        // 配置文件
        var configureBuilder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();
        // 获取配置文件里的连接字符串
        var connectionString = configureBuilder.GetConnectionString("Default");

        // 操作日志记录表加一个UserId字段记录用户
        const string column = "UserId";
        var columnOptions = new ColumnOptions
        {
            AdditionalDataColumns = new List<DataColumn> { new DataColumn(column, typeof(string)) }
        };

        // 日志配置
        Log.Logger = new LoggerConfiguration()
#if DEBUG
            .MinimumLevel.Debug()
#else
            .MinimumLevel.Information()
#endif
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning)
            .MinimumLevel.Override("Quartz", LogEventLevel.Warning)
            .Enrich.FromLogContext()
            .WriteTo.Async(c =>
			{
	            c.Logger(_ =>_.Filter.ByIncludingOnly(d => // 也可以加一个过滤条件
            				d.Level == LogEventLevel.Warning
           				)
           				// 写到数据库
		        		.WriteTo.Oracle(o =>
				            o.WithSettings(connectionString, columnOptions: columnOptions)
			                .UseBurstBatch()
			                .CreateSink()
	        			)		
					);
			})
            .WriteTo.Async(c => c.File("./Logs/logs.txt", rollingInterval: RollingInterval.Day))
            .WriteTo.Async(c =>
            {
                c.Console();
            })
            .CreateLogger();
}

3、在Oracle里建一张表

CREATE TABLE "WMS"."LOG" (
  "Id" NUMBER NOT NULL,
  "Message" CLOB,
  "MessageTemplate" CLOB,
  "Level" NVARCHAR2(128),
  "TimeStamp" TIMESTAMP(6) NOT NULL,
  "Exception" CLOB,
  "Properties" CLOB,
  "LogEvent" CLOB,
  "UserId" RAW(16)
)
LOGGING
NOCOMPRESS
PCTFREE 10
INITRANS 1
STORAGE (
  INITIAL 65536 
  NEXT 1048576 
  MINEXTENTS 1
  MAXEXTENTS 2147483645
  BUFFER_POOL DEFAULT
)
PARALLEL 1
NOCACHE
DISABLE ROW MOVEMENT
;

加索引

ALTER TABLE "WMS"."LOG" ADD CONSTRAINT "SYS_C009610" CHECK ("Id" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;
ALTER TABLE "WMS"."LOG" ADD CONSTRAINT "SYS_C009611" CHECK ("TimeStamp" IS NOT NULL) NOT DEFERRABLE INITIALLY IMMEDIATE NORELY VALIDATE;

好像由于oracle 11 没有自增,我还加了个触发器用来自增主键

CREATE TRIGGER "WMS"."LOG_TRIGGER" BEFORE INSERT ON "WMS"."LOG" REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW 
BEGIN 
	IF :new."Id" IS NULL THEN 
		SELECT 
			WMS.LOG_SEQUENCE.NEXTVAL 
		INTO 
			:new."Id" 
		FROM dual; 
	END IF; 
END;
/

4、使用

直接在代码里写就好了,ABP Vnext貌似在应用服务基类里封装了Logger属性

Loger.LogInformation("操作日志:阿珍爱上了阿强")
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不要叫我狗哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值