1、日志记录到数据库时,如对应日志表无日志,可通过如下方式排查:

       A、检查数据库的连接事件日志,如无任何事件,则表明数据库连接失败,这时需要排查log4net.config的配置;如有事件,则将对应Insert Sql直接在数据库内执行,排查对应SQL错误即可。

       B、在AspnetCore中使用时Microsoft.Extensions.Logging.Log4Net.AspNetCore包时,如SQL Server的连接驱动设置为 System.Data.SqlClient时,会数据库连接失败,且系统捕获不到异常。需要必须使用Microsoft.Data.SqlClient.

2、如需要开发自定义参数的Logger,可以参考如下代码:

A、 定义工具类

using log4net;
using log4net.Core;
using log4net.Layout;
using System.Reflection;

[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace XD.OIDC.Core
{

    public class XDLogPatternLayout : PatternLayout
    {
        public XDLogPatternLayout()
        {
            this.AddConverter("XDLayout", typeof(XDLogConvert));
        }
    }

    public class XDLogConvert : log4net.Layout.Pattern.PatternLayoutConverter
    {
        protected override void Convert(TextWriter writer, LoggingEvent loggingEvent)
        {
            if (!string.IsNullOrEmpty(Option))
            {
                object obj = loggingEvent.MessageObject;
                if (obj != null)
                {
                    PropertyInfo info = obj.GetType().GetProperty(Option);
                    if (info != null)
                    {
                        object custMsg = info.GetValue(obj, null);
                        writer.Write(custMsg);
                    }
                }
            }
        }
    }

    public class XDLogModel
    {
        public string IP { get; set; } = "localhost";

        public string UserName { get; set; } = "张三";

        public string Msg { get; set; } = "XDLog Message";
    }

    public class LogHelper
    {
        private static readonly log4net.ILog logDefault = log4net.LogManager.GetLogger("XDLOG");

        public static XDLogModel GetXDLogModel()
        {
            XDLogModel model = new XDLogModel();
            return model;
        }

        public static void LogInfo(XDLogModel msg) {
            logDefault.InfoFormat($"IP:{msg.IP},UserName:{msg.UserName},Mesage:{msg.Msg}", msg);
            logDefault.Info(msg );
        }
    }
}

B、在需要的位置记录日志

 XD.OIDC.Core.LogHelper.LogInfo( new XD.OIDC.Core.XDLogModel { IP="localhost", UserName = "张三",Msg = "李四"});         

C、Log4net.config文件配置

<log4net>    
    <appender name="SqlServer_AdoNetAppender"
              type="log4net.Appender.AdoNetAppender">
        <!--每次缓存的消息数,bufferSize=0时,表示每条日志立即写入DB-->
        <bufferSize value="0"/>
        <connectionType value="Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5"/>
        <connectionString value="Data Source=.\sqlexpress;Initial Catalog=XDLog;User ID=sa;Password=123456;Trust Server Certificate=True"/>
        <commandText value="INSERT INTO Sys_Log(Date,Thread,Level,Logger,Message,Exception) VALUES (@date, @thread, @level, @logger, @message, @exception)"/>
        <parameter>
            <parameterName value="@date"/>
            <dbType value="DateTime"/>
            <layout type="log4net.Layout.RawTimeStampLayout"/>
        </parameter>
        <parameter>
            <parameterName value="@thread"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%thread"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@level"/>
            <dbType value="String"/>
            <size value="50"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@logger"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@message"/>
            <dbType value="String"/>
            <size value="4000"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@exception"/>
            <dbType value="String"/>
            <size value="2000"/>
            <layout type="log4net.Layout.ExceptionLayout"/>
        </parameter>
    </appender>
    <appender name="SqlServer_AdoNet_Http_Appender"
              type="log4net.Appender.AdoNetAppender">
        <!--每次缓存的消息数,bufferSize=0时,表示每条日志立即写入DB-->
        <bufferSize value="0"/>
        <connectionType value="Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5"/>
        <connectionString value="Data Source=.\sqlexpress;Initial Catalog=XDLog;User ID=sa;Password=123qwe!@#;Trust Server Certificate=True"/>
        <commandText value="INSERT INTO Sys_Log_Http(Date,Thread,Level,Logger,Message,Exception) VALUES (@date, @thread, @level, @logger, @message, @exception)"/>
        <parameter>
            <parameterName value="@date"/>
            <dbType value="DateTime"/>
            <layout type="log4net.Layout.RawTimeStampLayout"/>
        </parameter>
        <parameter>
            <parameterName value="@thread"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%thread"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@level"/>
            <dbType value="String"/>
            <size value="50"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%level"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@logger"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%logger"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@message"/>
            <dbType value="String"/>
            <size value="4000"/>
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="%message"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@exception"/>
            <dbType value="String"/>
            <size value="2000"/>
            <layout type="log4net.Layout.ExceptionLayout"/>
        </parameter>
    </appender>
    <appender name="Console"
              type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
            <!-- Pattern to output the caller's file name and line number -->
            <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception"/>
        </layout>
    </appender>    
    <appender name="ConsoleAppender"
              type="log4net.Appender.ManagedColoredConsoleAppender">
        <mapping>
            <level value="ERROR"/>
            <foreColor value="Red"/>
        </mapping>
        <mapping>
            <level value="WARN"/>
            <foreColor value="Yellow"/>
        </mapping>
        <mapping>
            <level value="INFO"/>
            <foreColor value="White"/>
        </mapping>
        <mapping>
            <level value="DEBUG"/>
            <foreColor value="Green"/>
        </mapping>
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception"/>
        </layout>
    </appender>
    <appender name="XDAdo_Appender"
              type="log4net.Appender.AdoNetAppender">
        <!--每次缓存的消息数,bufferSize=0时,表示每条日志立即写入DB-->
        <bufferSize value="0"/>
        <connectionType value="Microsoft.Data.SqlClient.SqlConnection,Microsoft.Data.SqlClient, Version=5.0.0.0, Culture=neutral, PublicKeyToken=23ec7fc2d6eaa4a5"/>
        <connectionString value="Data Source=.\sqlexpress;Initial Catalog=XDLog;User ID=sa;Password=123qwe!@#;Trust Server Certificate=True"/>
        <commandText value="INSERT INTO Sys_Log_Xd(Date,IP,UserName,Msg) VALUES (getdate(), @IP, @UserName,@Msg)"/>
        <parameter>
            <parameterName value="@IP"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="XD.OIDC.Core.XDLogPatternLayout">
                <XDLogConvert value="%IP"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@UserName"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="XD.OIDC.Core.XDLogPatternLayout">
                <XDLogConvert value="%UserName"/>
            </layout>
        </parameter>
        <parameter>
            <parameterName value="@Msg"/>
            <dbType value="String"/>
            <size value="255"/>
            <layout type="XD.OIDC.Core.XDLogPatternLayout">
                <XDLogConvert value="%Msg"/>
            </layout>
        </parameter>
        <!--<layout type="XD.OIDC.Core.XDLogPatternLayout">
        <conversionPattern value="%XDLayout{@IP} %XDLayout{@UserName} %XDLayout{@Msg} " />
      </layout>-->
    </appender>
    <logger name="Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware">
        <!--
      日志的Level设置值:ALL、EBUG、INFO、WARN、ERROR、FATAL、OFF 如需高级调试设置以及log4net的高级配置请参见log4net文档
      -->
        <level value="INFO"/>
        <appender-ref ref="SqlServer_AdoNet_Http_Appender"/>
    </logger>
    <logger name="XDLOG">
        <level value="INFO"/>
        <appender-ref ref="XDAdo_Appender"/>
    </logger>
    <root>
        <!--日志的Level设置值:ALL、DEBUG、INFO、WARN、ERROR、FATAL、OFF 如需高级调试设置以及log4net的高级配置请参见log4net文档-->
        <level value="TRACE"/>
        <appender-ref ref="RollingFile"/>
        <appender-ref ref="TraceAppender"/>
        <appender-ref ref="ConsoleAppender"/>
        <appender-ref ref="SqlServer_AdoNetAppender"/>
    </root>
</log4net>

 

posted @ 2024-12-30 20:50 千年海岩 阅读(32) 评论(0) 推荐(0) 编辑
摘要: Exited(1) Cannot find /usr/local/tomcat/bin/setclasspath.sh This file is needed to run this program 解决办法:在 docker run 命令后加一个 --privileged 参数。该参数可以让容器内 阅读全文
posted @ 2023-06-02 13:51 千年海岩 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 本次试验用的是 mysqldump 进行备份。 1、操作系统的Shell下,执行 mysqldump -umysql -p db1 > /mysqlbak/db1.sql 说明:-umysql 内 mysql是数据库的登录用户; db1 是待备份的数据库名称; /mysqlbak/db1.sql 是 阅读全文
posted @ 2023-03-14 16:05 千年海岩 阅读(28) 评论(0) 推荐(0) 编辑
摘要: 1、用 grep 'temporary password' /var/log/mysqld.log 生成的初始密码老提示密码错误,只能直接发大招: A、vi /etc/my.cnf 在文件的 [mysqld] 内增加一行 skip_table_grant_tables B、 重启mysql: sys 阅读全文
posted @ 2023-03-07 09:33 千年海岩 阅读(14) 评论(0) 推荐(0) 编辑
摘要: 项目内使用了第三方的非托管dll库,导致运行抛出如下异常: 未处理System.BadImageFormatExceptionMessage: “System.BadImageFormatException”类型的未经处理的异常在 XD.Vision.exe 中发生 其他信息: 试图加载格式不正确的 阅读全文
posted @ 2023-02-18 22:11 千年海岩 阅读(504) 评论(0) 推荐(0) 编辑
摘要: 1、在win11上安装IIS(控制面版-->程序-->程序与功能-->启用或关闭windows功能),因 2、部署站点后,网站提示: 管理员cmd执行下面命令 C:\windows\system32\inetsrv\appcmd unlock config -section:system.webSe 阅读全文
posted @ 2023-01-27 13:06 千年海岩 阅读(2794) 评论(0) 推荐(1) 编辑
摘要: 1、通过阿里云、腾讯云等申请证书,申请时,必须要设置私钥(否则服务器无法导入) 2、将已签发的证书下载到IIS服务器; 3、双击证书导入; 4、运行mmc打开计算机管理控制台(无此步骤,IIS绑定https时,证书下拉框无法显已导入的证书) 5、IIS的站点编辑绑定,添加https,选择上述证书。 阅读全文
posted @ 2022-09-17 08:29 千年海岩 阅读(214) 评论(0) 推荐(0) 编辑
摘要: SQLServer数据库处于恢复的挂起状态解决办法 由于服务器磁盘丢失,数据库显示“恢复挂起”状态,导致无法对数据库操作。 产生原因:可能是因为数据库的数据文件和日志文件在数据库正常连接的情况下,文件所在的磁盘脱机了,导致数据库在一段时间内找不数据文件,就把数据库置于恢复挂起状态了。 解决办法:1、 阅读全文
posted @ 2022-08-07 10:51 千年海岩 阅读(6399) 评论(0) 推荐(0) 编辑
摘要: 1、从https://dev.mysql.com/downloads/, 选择 MySQL Community Server 下载软件包(该软件包无Setup,拷贝到对应目录即可使用) 2、以管理员身份运行 cmd; 3、切换到 Mysql目录内的 bin; 4、执行 mysqld --instal 阅读全文
posted @ 2021-09-23 16:45 千年海岩 阅读(113) 评论(0) 推荐(0) 编辑
摘要: 编译的时候在底部出现的Build窗口中文出现了乱码的问题,代码中没有出现乱码情况,如下图: 解决方法 在Android Studio中双击Shift或者点击顶部全局搜索"Edit Custom VM Options" 然后在打开的文件中添加一句 -Dfile.encoding=UTF-8 然后重启A 阅读全文
posted @ 2021-03-30 21:15 千年海岩 阅读(1051) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示