nuget包准备
提前准备好如图所示的Nuget包。
完成数据库连接配置
这里提供我使用的nlog配置作为参考
<?xml version="1.0" encoding="utf-8"?>
<!--Nlog内部日志配置,记录nlog运行时的问题-->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
throwExceptions="false"
internalLogLevel="Warn"
internalLogFile="${basedir}logs\NlogRecords.log">
<targets>
<!--输出文件 按天归档,最多存档文件100个,单个文件不超过1M,-->
<target name="logFile" xsi:type="File" keepFileOpen="false" encoding="utf-8" concurrentWrites="false"
fileName="${basedir}\logs\${shortdate}.log"
archiveAboveSize="1048576"
archiveNumbering="Sequence"
maxArchiveFiles="100"
archiveEvery="Day"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}" />
<!--输出彩色控制台 xsi:type="Console"是指定输出到普通控制台-->
<target name="logConsole" xsi:type="ColoredConsole"
useDefaultRowHighlightingRules="false"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}">
<highlight-row condition="level == LogLevel.Trace" foregroundColor="DarkGray" />
<highlight-row condition="level == LogLevel.Debug" foregroundColor="Green" />
<highlight-row condition="level == LogLevel.Info" foregroundColor="White" />
<highlight-row condition="level == LogLevel.Warn" foregroundColor="Yellow" />
<highlight-row condition="level == LogLevel.Error" foregroundColor="Red" />
<highlight-row condition="level == LogLevel.FATAL" foregroundColor="Magenta" />
</target>
<!--写入数据库 xsi:type="Database"是指定输出到数据库-->
<target name="mysql_log" xsi:type="Database"
dbProvider="MySql.Data.MySqlClient.MySqlConnection,MySql.Data"
connectionString="server=127.0.0.1;database=ApplicationLog;user=playgameserver;pwd=pwd_playganmeserver;port=3306"
commandText="Insert Into LogRecords(Application,CreateDateTime,LogLevel,Logger,Message,Exception) values (@Application,@CreateDateTime,@LogLevel,@Logger,@Message,@Exception);"
>
<parameter name ="@Application" layout="playgames_server"/>
<parameter name ="@CreateDateTime" layout="${date}"/>
<parameter name ="@LogLevel" layout="${level}"/>
<parameter name ="@Logger" layout="${logger}"/>
<parameter name ="@Message" layout="${message}"/>
<parameter name ="@Exception" layout="${exception:tostring}"/>
</target>
<target xsi:type="Null" name="blackhole" />
</targets>
<rules>
<!--过滤掉Microsoft的日志-->
<logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
<logger name="*" minlevel="Trace" writeTo="mysql_log" />
<logger name="*" minlevel="Trace" writeTo="logFile" />
<logger name="*" minlevel="Trace" writeTo="logConsole" />
</rules>
</nlog>
完成数据库配置
由于我们使用的MySql版本为8.4,此版本的用户加密插件默认为 caching_sha2_password,然而我们用到的工具包并不支持此类加密方式,因此,需要修改加密方式为 mysql_native_password
查看mysql插件状态,登录mysql数据库,依次执行以下两条命令。查看mysql_native_password插件状态,如果为 ACTIVE 则不需要更改。(默认为DISABLED)
use mysql
show plugins;
若为DISABLED,可以通过修改mysql数据库的配置文件my.ini,增加 mysql_native_password = ON 来开启mysql_native_password 插件。
然后通过mysql指令修改连接数据库所用的用户的加密插件即可。
alter user 'playgameserver'@'localhost' IDENTIFIED with mysql_native_password by 'pwd_playganmeserver';
需要注意的是MySql8.4的my.ini文件并不在MySql程序的安装目录下,而是在ProgramData目录下,此目录默认为隐藏目录。C:\ProgramData\MySQL\MySQL Server 8.4
至此已经完成了全部配置工作,运行程序即可看到日志被写入数据库。