内网细节修改

This commit is contained in:
范露尧
2022-10-27 09:24:50 +08:00
parent 1a605509be
commit 2e5e01a35d
10 changed files with 364 additions and 177 deletions

View File

@@ -1,7 +1,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17 # Visual Studio Version 16
VisualStudioVersion = 17.1.32421.90 VisualStudioVersion = 16.0.31624.102
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Getf_Service_Transfer_core_client", "Getf_Service_Transfer_core_client\Getf_Service_Transfer_core_client.csproj", "{F037E01A-741E-490C-91F0-76D97137DFA6}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Getf_Service_Transfer_core_client", "Getf_Service_Transfer_core_client\Getf_Service_Transfer_core_client.csproj", "{F037E01A-741E-490C-91F0-76D97137DFA6}"
EndProject EndProject

View File

@@ -51,15 +51,16 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler
{ {
var requestStream = httpWebRequest.GetRequestStream(); var requestStream = httpWebRequest.GetRequestStream();
SetRequestStream(httpWebRequest, requestStream, jObject, encoding); SetRequestStream(httpWebRequest, requestStream, jObject, encoding);
r = GetResponse(httpWebRequest, encoding); r = GetResponse(httpWebRequest, jObject, encoding);
requestStream.Close(); requestStream.Close();
requestStream.Dispose(); requestStream.Dispose();
} }
else else
{ {
r = GetResponse(httpWebRequest, encoding); r = GetResponse(httpWebRequest, null, encoding);
} }
msg = String.Empty; msg = String.Empty;
_LogHelper.Info($"93段接口:method:{method},url:{url},参数:{jObject["Data"]},结果:{r}");
return r; return r;
} }
catch (WebException e) catch (WebException e)
@@ -72,20 +73,20 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler
using (StreamReader streamReader = new StreamReader(stream)) using (StreamReader streamReader = new StreamReader(stream))
{ {
msg += streamReader.ReadToEnd(); msg += streamReader.ReadToEnd();
_LogHelper.Info("请求错误原因为:" + msg); _LogHelper.Info("1:请求错误原因为:" + msg);
} }
} }
else else
{ {
msg += e.Message; msg += e.Message;
_LogHelper.Info("请求错误原因为:" + msg); _LogHelper.Info("2:请求错误原因为:" + msg);
} }
} }
} }
catch (Exception e) catch (Exception e)
{ {
msg = e.Message; msg = e.Message;
_LogHelper.Info("请求错误原因为:" + msg); _LogHelper.Info("3:请求错误原因为:" + msg);
} }
return null; return null;
} }
@@ -126,12 +127,21 @@ namespace Getf_Service_Transfer_Client_Service_HttpHandler
{ {
var param = jObject["Param"]?.Value<string>() ?? String.Empty; var param = jObject["Param"]?.Value<string>() ?? String.Empty;
streamWrite.Write(param); streamWrite.Write(param);
var jdata = jObject["Data"];
if (jdata != null)
{
var Data = jdata.ToString();
var _bytes = encoding.GetBytes(Data);
httpWebRequest.ContentLength = _bytes.Length;
requestStream.Write(_bytes, 0, _bytes.Length);
}
} }
} }
private static readonly string[] TextContentTypes = new string[] { "application/json", "text/html" }; private static readonly string[] TextContentTypes = new string[] { "application/json", "text/html" };
private object GetResponse(HttpWebRequest httpWebRequest, Encoding encoding) private object GetResponse(HttpWebRequest httpWebRequest, JObject jObject, Encoding encoding)
{ {
var response = httpWebRequest.GetResponse(); var response = httpWebRequest.GetResponse();
using (var stream = response.GetResponseStream()) using (var stream = response.GetResponseStream())

View File

@@ -21,134 +21,137 @@ namespace Getf_Service_Transfer_Client_coreService
{ {
public class ClientService : IDisposable public class ClientService : IDisposable
{ {
private DateTime LastRecvTime = DateTime.Now; private DateTime LastRecvTime = DateTime.Now;
LogHelper _LogHelper = new LogHelper(); LogHelper _LogHelper = new LogHelper();
private readonly IDataHandler DataHandler; private readonly IDataHandler DataHandler;
private TcpClient TcpClient; private TcpClient TcpClient;
private readonly string Ip; private readonly string Ip;
private readonly int Port; private readonly int Port;
private Thread HeartThread; private Thread HeartThread;
private bool IsRetrying; private bool IsRetrying;
public ClientService() public ClientService()
{ {
//var serviceAddressInfo = "21".Split("1"); //var serviceAddressInfo = "21".Split("1");
var serviceAddressInfo = App.Configuration["Target:ServiceAddressInfo"].Split(':'); var serviceAddressInfo = App.Configuration["Target:ServiceAddressInfo"].Split(':');
Ip = serviceAddressInfo[0]; Ip = serviceAddressInfo[0];
Port = int.Parse(serviceAddressInfo[1]); Port = int.Parse(serviceAddressInfo[1]);
//var assemblyInfo = "21".Split("1"); //var assemblyInfo = "21".Split("1");
var assemblyInfo = App.Configuration["Target:DataHandlerClassInfo"].Split(','); var assemblyInfo = App.Configuration["Target:DataHandlerClassInfo"].Split(',');
DataHandler = Assembly.Load(assemblyInfo[1]).CreateInstance(assemblyInfo[0]) as IDataHandler; DataHandler = Assembly.Load(assemblyInfo[1]).CreateInstance(assemblyInfo[0]) as IDataHandler;
//_LogHelper = new LogHelper(); //_LogHelper = new LogHelper();
} }
public void Start() public void Start()
{ {
StartNewEasyClient(); StartNewEasyClient();
DoHeart(); DoHeart();
} }
private void DoDebug() private void DoDebug()
{ {
for (var i = 0; i < 5; i++) for (var i = 0; i < 5; i++)
{ {
Thread t = new Thread(() => Thread t = new Thread(() =>
{ {
while (true) while (true)
{ {
var r = GetRegisterEntity(); var r = GetRegisterEntity();
r.Head.Type = 4; r.Head.Type = 4;
r.Data = new byte[100 * 1024 * 1024]; r.Data = new byte[100 * 1024 * 1024];
Send(r.ToByte()); Send(r.ToByte());
Thread.Sleep(100); Thread.Sleep(100);
} }
}); });
t.Start(); t.Start();
} }
} }
private void StartNewEasyClient() private void StartNewEasyClient()
{ {
TcpClient = new TcpClient(Ip, Port, OnDataGeted, OnConnected, OnClosed, OnError); if (TcpClient == null || !TcpClient.IsConnected)
} TcpClient = new TcpClient(Ip, Port, OnDataGeted, OnConnected, OnClosed, OnError);
else
_LogHelper.Info("已存在可用连接");
}
private void OnDataGeted(TransInfo transInfo) private void OnDataGeted(TransInfo transInfo)
{ {
LastRecvTime = DateTime.Now; LastRecvTime = DateTime.Now;
if (transInfo.Body == null)//心跳包 if (transInfo.Body == null)//心跳包
{ {
/*//应用已被注册 再试 /*//应用已被注册 再试
if (transInfo.TransResultInfo != null && transInfo.TransResultInfo.Code == -210) if (transInfo.TransResultInfo != null && transInfo.TransResultInfo.Code == -210)
{ {
Reconnect(null, null); Reconnect(null, null);
}*/ }*/
if (transInfo.TransResultInfo != null && transInfo.TransResultInfo.Message == "注册成功!") if (transInfo.TransResultInfo != null && transInfo.TransResultInfo.Message == "注册成功!")
{ {
"注册成功".LogInformation(); "注册成功".LogInformation();
_LogHelper.Info("注册成功"); _LogHelper.Info("注册成功");
return; return;
} }
else else
{ {
if (transInfo.TransResultInfo != null && !String.IsNullOrWhiteSpace(transInfo.TransResultInfo.Message)) if (transInfo.TransResultInfo != null && !String.IsNullOrWhiteSpace(transInfo.TransResultInfo.Message))
{ {
string info = "发生错误:" + transInfo.TransResultInfo.Message; string info = "发生错误:" + transInfo.TransResultInfo.Message;
info.LogError(); info.LogError();
_LogHelper.Error("发生错误:" + transInfo.TransResultInfo.Message); _LogHelper.Error("发生错误:" + transInfo.TransResultInfo.Message);
} }
} }
return; return;
} }
var transResult = DataHandler.HandlerData(transInfo); var transResult = DataHandler.HandlerData(transInfo);
var r = GetRegisterEntity(); var r = GetRegisterEntity();
r.Body = new TransBody() r.Body = new TransBody()
{ {
Key = transInfo.Body.Key Key = transInfo.Body.Key
}; };
r.Head.Type = 3; r.Head.Type = 3;
r.TransResultInfo = transResult.TransResultInfo; r.TransResultInfo = transResult.TransResultInfo;
r.Data = transResult.Data; r.Data = transResult.Data;
Send(r.ToByte()); Send(r.ToByte());
} }
private void OnConnected(object sender, EventArgs e) private void OnConnected(object sender, EventArgs e)
{ {
IsRetrying = false; IsRetrying = false;
_LogHelper.Info("连接成功"); _LogHelper.Info("连接成功");
"连接成功".LogInformation(); "连接成功".LogInformation();
Send(GetRegisterEntity().ToByte()); Send(GetRegisterEntity().ToByte());
} }
private void OnClosed(object sender, EventArgs e) private void OnClosed(object sender, EventArgs e)
{ {
"EasyClient.OnClosed".LogInformation(); "EasyClient.OnClosed".LogInformation();
_LogHelper.Info("EasyClient.OnClosed"); _LogHelper.Info("EasyClient.OnClosed");
ReStart(); ReStart();
} }
private void OnError(object sender, EventArgs e) private void OnError(object sender, ErrorEventArgs e)
{ {
string warn = "连接出错,原因为:" + ((ErrorEventArgs)e).Exception.Message; string warn = "连接出错,原因为:" + ((ErrorEventArgs)e).Exception.Message;
warn.LogWarning(); warn.LogWarning();
//_LogHelper.Info("连接出错,原因为:" + ((ErrorEventArgs)e).Exception.Message); //_LogHelper.Info("连接出错,原因为:" + ((ErrorEventArgs)e).Exception.Message);
ReStart(); ReStart();
} }
private void ReStart() private void ReStart()
{ {
Thread.Sleep(5000); //Thread.Sleep(5000);
StartNewEasyClient(); StartNewEasyClient();
} }
private void DoHeart() private void DoHeart()
{ {
#if DEBUG #if DEBUG
/*for (int i = 0; i < 100; i++) /*for (int i = 0; i < 100; i++)
{ {
var testThread = new Thread(() => var testThread = new Thread(() =>
{ {
@@ -162,65 +165,70 @@ namespace Getf_Service_Transfer_Client_coreService
#endif #endif
HeartThread = new Thread(() => HeartThread = new Thread(() =>
{ {
while (true) //_LogHelper.Info("开始发送心跳包");
{ while (true)
if ((DateTime.Now - LastRecvTime).TotalMinutes > 10) {
{ //_LogHelper.Info("开始发送心跳包1");
_LogHelper.Error("超过一分钟没收到心跳包的反馈信息"); if ((DateTime.Now - LastRecvTime).TotalMinutes > 1)
TcpClient.HeartLost(); {
} _LogHelper.Info("超过一分钟没收到心跳包的反馈信息");
if (TcpClient.IsConnected) _LogHelper.Error("超过一分钟没收到心跳包的反馈信息");
{ TcpClient.HeartLost();
SendHeart(); }
} if (TcpClient.IsConnected)
Thread.Sleep(5 * 1000); {
} //_LogHelper.Info("存在连接,开始发送心跳包");
}); SendHeart();
HeartThread.Start(); //_LogHelper.Info("存在连接,发送心跳包完成");
} }
Thread.Sleep(5 * 1000);
}
});
HeartThread.Start();
}
private void SendHeart() private void SendHeart()
{ {
var r = GetRegisterEntity(); var r = GetRegisterEntity();
r.Head.Type = 4; r.Head.Type = 4;
Send(r.ToByte()); Send(r.ToByte());
} }
private void Send(byte[] data) private void Send(byte[] data)
{ {
if (!TcpClient.IsConnected) return; if (!TcpClient.IsConnected) return;
try try
{ {
TcpClient.Send(data); TcpClient.Send(data);
} }
catch (Exception e) catch (Exception e)
{ {
_LogHelper.Error("发送错误原因为:" + e.Message); _LogHelper.Error("发送错误原因为:" + e.Message);
} }
} }
private TransInfo GetRegisterEntity() private TransInfo GetRegisterEntity()
{ {
var ts = TypeHelper.GetTimeStamp(); var ts = TypeHelper.GetTimeStamp();
var r = new TransInfo() var r = new TransInfo()
{ {
Head = new TransHead() Head = new TransHead()
{ {
Type = 1, Type = 1,
AppID = App.Configuration["Target:AppID"], AppID = App.Configuration["Target:AppID"],
AppSecret = App.Configuration["Target:AppSecret"], AppSecret = App.Configuration["Target:AppSecret"],
TimeStamp = ts, TimeStamp = ts,
Sign = Md5Helper.Md5(ts + App.Configuration["Target:Key"]) Sign = Md5Helper.Md5(ts + App.Configuration["Target:Key"])
} }
}; };
return r; return r;
} }
public void Dispose() public void Dispose()
{ {
TcpClient.Dispose(); TcpClient.Dispose();
} }
} }
} }

View File

@@ -4,6 +4,16 @@
<TargetFramework>net5.0</TargetFramework> <TargetFramework>net5.0</TargetFramework>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Remove="applicationconfig.json" />
</ItemGroup>
<ItemGroup>
<Content Include="applicationconfig.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Furion" Version="4.6.5" /> <PackageReference Include="Furion" Version="4.6.5" />
<PackageReference Include="log4net" Version="2.0.15" /> <PackageReference Include="log4net" Version="2.0.15" />
@@ -12,10 +22,4 @@
<PackageReference Include="SuperSocket.ProtoBase" Version="1.7.0.17" /> <PackageReference Include="SuperSocket.ProtoBase" Version="1.7.0.17" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<None Update="applicationconfig.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project> </Project>

View File

@@ -20,7 +20,7 @@ namespace Getf_Service_Transfer_Client_coreService
Action<object, EventArgs> OnClosed; Action<object, EventArgs> OnClosed;
public bool IsConnected { get { return EasyClient.IsConnected; } } public bool IsConnected { get { return EasyClient.IsConnected; } }
public TcpClient(string ip, int port, Action<TransInfo> onDataGeted, Action<object, EventArgs> onConnected, Action<object, EventArgs> onClosed, Action<object, EventArgs> onError) public TcpClient(string ip, int port, Action<TransInfo> onDataGeted, Action<object, EventArgs> onConnected, Action<object, EventArgs> onClosed, Action<object, ErrorEventArgs> onError)
{ {
Ip = ip; Ip = ip;
Port = port; Port = port;

View File

@@ -17,11 +17,13 @@
] ]
}, },
"Target": { "Target": {
"ServiceAddressInfo": "127.0.0.1:8111", //目标服务器地址 "ServiceAddressInfo": "127.0.0.1:8002", //目标服务器地址
"DataHandlerClassInfo": "Getf_Service_Transfer_Client_Service_HttpHandler.HttpDataHandler,Getf_Service_Transfer_Client_Service_HttpHandler", "ServiceAddressInfo2": "10.19.94.135:8002", //目标服务器地址
"AppID": "test", "ServiceAddressInfo3": "115.238.132.35:6000", //目标服务器地址
"AppSecret": "b7ybdg482IXFsojQ4feDHf4NaiSLRtFjL7MVI6ysnvjrZ6jikFX74tVZhZKYG23A", "DataHandlerClassInfo": "Getf_Service_Transfer_Client_Service_HttpHandler.HttpJsonDataHandler,Getf_Service_Transfer_Client_Service_HttpHandler",
"Key": "TVgSoGYNJrnU7Kg6Csuodh4IdxqZGxpEJAdRlEcTn72KlUgAiHcr7bdxLKFf9pJ6" "AppID": "Reg.Custom.SourceCode",
"AppSecret": "ab2cb0aa78cb986d3d05059b8f9bafee",
"Key": "86bf52124bc423351c9da81cb3dd8c94"
}, },
"Logging": { "Logging": {
"LogLevel": { "LogLevel": {

View File

@@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<ApplicationIcon />
<OutputType>Exe</OutputType>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Getf_Service_Transfer_core_client\Getf_Service_Transfer_core_client.csproj" />
</ItemGroup>
</Project>

View File

@@ -9,10 +9,17 @@
<PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.Hosting" Version="5.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="5.0.1" /> <PackageReference Include="Microsoft.Extensions.Hosting.Systemd" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" /> <PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="5.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Log4Net.AspNetCore" Version="6.1.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Getf_Service_Transfer_Client_coreService\Getf_Service_Transfer_Client_coreService.csproj" /> <ProjectReference Include="..\Getf_Service_Transfer_Client_coreService\Getf_Service_Transfer_Client_coreService.csproj" />
<ProjectReference Include="..\Getf_Service_Transfer_Client_Service_HttpHandler\Getf_Service_Transfer_Client_Service_HttpHandler.csproj" /> <ProjectReference Include="..\Getf_Service_Transfer_Client_Service_HttpHandler\Getf_Service_Transfer_Client_Service_HttpHandler.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Content Update="log4net.config">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
</Project> </Project>

View File

@@ -44,8 +44,16 @@ namespace Getf_Service_Transfer_core_client
}; };
}); });
// services.AddHostedService<Worker>(); // services.AddHostedService<Worker>();
})//配置log4net
.ConfigureLogging(p =>
{
p.AddFilter("System", LogLevel.Warning); //过滤掉系统默认的一些日志
p.AddFilter("Microsoft", LogLevel.Warning);//过滤掉系统默认的一些日志
var path = AppContext.BaseDirectory + "\\log4net.config";
//不带参数表示log4net.config的配置文件就在应用程序根目录下也可以指定配置文件的路径
p.AddLog4Net(path);
}) })
//.UseWindowsService() ///windows部署 .UseWindowsService(); ///windows部署
.UseSystemd(); //LIUNX部署 // .UseSystemd(); //LIUNX部署
} }
} }

View File

@@ -0,0 +1,134 @@
<log4net>
<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="RollingFileError" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<rollingStyle value="Composite"/>
<datePattern value="yyyy\\MM\\yyyyMMdd'_error.txt'"/>
<staticLogFileName value="false" />
<maximumFileSize value="50MB" />
<maxSizeRollBackups value="200" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<!--<appender name="RollingFileInfo" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<rollingStyle value="date"/>
<datePattern value="yyyy\\MM\\yyyyMMdd'_info.txt'"/>
<staticLogFileName value="false" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="Info" />
<levelMax value="Info" />
</filter>
<maximumFileSize value="100MB" />
<maxSizeRollBackups value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<appender name="RollingFileWarn" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<rollingStyle value="date"/>
<datePattern value="yyyy\\MM\\yyyyMMdd'_warn.txt'"/>
<staticLogFileName value="false" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="WARN" />
<levelMax value="WARN" />
</filter>
<maximumFileSize value="100MB" />
<maxSizeRollBackups value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<appender name="RollingFileDebug" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<rollingStyle value="date"/>
<datePattern value="yyyy\\MM\\yyyyMMdd'_debug.txt'"/>
<staticLogFileName value="false" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="Debug" />
<levelMax value="Debug" />
</filter>
<maximumFileSize value="100MB" />
<maxSizeRollBackups value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>-->
<appender name="RollingFileAll" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<rollingStyle value="Composite"/>
<datePattern value="yyyy\\MM\\yyyyMMdd'.txt'"/>
<staticLogFileName value="false" />
<maximumFileSize value="50MB" />
<maxSizeRollBackups value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<!--<appender name="RollingFileAll" type="log4net.Appender.RollingFileAppender">
<file value="logs\\" />
<appendToFile value="true" />
<rollingStyle value="date"/>
<datePattern value="yyyy\\MM\\yyyyMMdd'.txt'"/>
<staticLogFileName value="false" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>-->
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<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>
<root>
<level value="TRACE" />
<appender-ref ref="RollingFileError" />
<!--<appender-ref ref="RollingFileInfo" />
<appender-ref ref="RollingFileWarn" />
<appender-ref ref="RollingFileDebug" />-->
<appender-ref ref="RollingFileAll" />
<appender-ref ref="TraceAppender" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>