Я использую код log4net в файле app.connfig, но тогда служба не запустится.Если я использую код в качестве отдельного класса и вызываю его в конструкторе службы, он делает.Если я сделаю это последним способом, логи не будут регистрироваться.
Код моего файла конфигурации: -
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<log4net>
<appender name="TestAppender" type="log4net.Appender.RollingFileAppender" >
<file value="C:\log\impersonationlog_JamochaService.log" />
<encoding value="utf-8" />
<appendToFile value="true" />
<rollingStyle value="Date" />
<!--<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />-->
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level [%thread] %type.%method - %message%n" />
</layout>
</appender>
<root>
<level value="All" />
<!-- If the following line is not included the log file
will not be created even if log4net is configured with this file. -->
<appender-ref ref="TestAppender" />
</root>
</log4net>
</configuration>
Если я использую этот класс вместо кода app.config, служба запускается, но регистрация не всегда происходит.
public class Logger
{
public static void Setup()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
PatternLayout patternLayout = new PatternLayout();
patternLayout.ConversionPattern = "%date [%thread] %-5level %logger - %message%newline";
patternLayout.ActivateOptions();
RollingFileAppender roller = new RollingFileAppender();
roller.AppendToFile = false;
roller.File = "C:\\Logs\\EventLog.txt";
roller.Layout = patternLayout;
roller.MaxSizeRollBackups = 5;
roller.MaximumFileSize = "1GB";
roller.RollingStyle = RollingFileAppender.RollingMode.Size;
roller.StaticLogFileName = true;
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);
MemoryAppender memory = new MemoryAppender();
memory.ActivateOptions();
hierarchy.Root.AddAppender(memory);
hierarchy.Root.Level = Level.Info;
hierarchy.Configured = true;
}
}
Код app.config работал нормально до вчерашнего дня, после некоторых добавлений к модулю он ведет себя таким образом.Этот метод в классе вызывается в конструкторе, как показано ниже: -
public Service1()
{
InitializeComponent();
Logger.Setup();
}
Пожалуйста, помогите мне преодолеть это и снова зарегистрируйте данные должным образом.
Внесенные изменения я добавил этот коди вызвал эту функцию в другой функции, которая запускает работу всей службы по умолчанию: -
private void SocketCommunication()
{
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);
permission = new SocketPermission(NetworkAccess.Accept,
TransportType.Tcp, "", SocketPermission.AllPorts);
IPHostEntry ipHost = Dns.GetHostEntry("");
IPAddress ipAddr = ipHost.AddressList[0];
IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 4510);
socket.Bind(ipEndPoint); //Bind to the client's IP
socket.Listen(10);//Listen for maximum 10 connections
sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
Log.Info("Waiting for a client...");
client = socket.Accept();
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
Log.Info("Connected with " + clientep.Address + " at port " + clientep.Port);
while (true)
{
//string welcome = "Welcome. "; //This is the data we we'll respond with
//byte[] data = new byte[1024];
//data = Encoding.ASCII.GetBytes(welcome); //Encode the data
//client.Send(data, data.Length, SocketFlags.None); //Send the data to the client
//Console.WriteLine("Disconnected from {0}", clientep.Address);
byte[] data = new byte[1024];
int receivedDataLength = client.Receive(data);
string stringData = Encoding.ASCII.GetString(data, 0, receivedDataLength);
Log.Info("Data recieved :- " + stringData);
//Decode the data received
int adder = Convert.ToInt32(stringData);
adder++;
string input = adder.ToString();
data = Encoding.ASCII.GetBytes(input);
client.Send(data, data.Length, SocketFlags.None);
Log.Info("Data sent :- " + input); //data sent
}
}