У меня есть log4net.config
файл со следующим содержимым:
<log4net>
<appender name="PostgresAppender" type="App.PostgresAppender, App">
</appender>
<root>
<level value="ALL" />
<appender-ref ref="PostgresAppender" />
</root>
</log4net>
PostgresAppender
:
public class PostgresAppender : AppenderSkeleton
{
protected override void Append(LoggingEvent loggingEvent)
{
using (NpgsqlConnection conn = new NpgsqlConnection(Startup.Configuration.GetConnectionString("Logging")))
{
conn.Open();
using (NpgsqlCommand command = new NpgsqlCommand("insert into public.logs(app_name,thread,level,location,message,log_date,exception) values(:app_name,:thread,:level,:location,:message,:log_date,:exception)", conn))
{
var appName = command.CreateParameter();
appName.Direction = System.Data.ParameterDirection.Input;
appName.DbType = System.Data.DbType.String;
appName.ParameterName = ":app_name";
appName.Value = loggingEvent.LookupProperty("AppName");
command.Parameters.Add(appName);
var thread = command.CreateParameter();
thread.Direction = System.Data.ParameterDirection.Input;
thread.DbType = System.Data.DbType.String;
thread.ParameterName = ":thread";
thread.Value = loggingEvent.ThreadName;
command.Parameters.Add(thread);
var level = command.CreateParameter();
level.Direction = System.Data.ParameterDirection.Input;
level.DbType = System.Data.DbType.String;
level.ParameterName = ":level";
level.Value = loggingEvent.Level;
command.Parameters.Add(level);
var location = command.CreateParameter();
location.Direction = System.Data.ParameterDirection.Input;
location.DbType = System.Data.DbType.String;
location.ParameterName = ":location";
location.Value = loggingEvent.LocationInformation.FullInfo;
command.Parameters.Add(location);
var message = command.CreateParameter();
message.Direction = System.Data.ParameterDirection.Input;
message.DbType = System.Data.DbType.String;
message.ParameterName = ":message";
message.Value = loggingEvent.RenderedMessage;
command.Parameters.Add(message);
var log_date = command.CreateParameter();
log_date.Direction = System.Data.ParameterDirection.Input;
log_date.DbType = System.Data.DbType.DateTime2;
log_date.ParameterName = ":log_date";
log_date.Value = loggingEvent.TimeStamp;
command.Parameters.Add(log_date);
var exception = command.CreateParameter();
exception.Direction = System.Data.ParameterDirection.Input;
exception.DbType = System.Data.DbType.String;
exception.ParameterName = ":exception";
exception.Value = loggingEvent.GetExceptionString();
command.Parameters.Add(exception);
command.ExecuteNonQuery();
}
conn.Close();
}
}
}
В appsettings.json
Я настраиваю log4net следующим образом:
"Log4NetConfigFile": {
"Name": "log4net.config"
}
Затем я пытаюсь войти в систему, настроив регистратор в program.cs
:
public static readonly ILog _log = LogManager.GetLogger(typeof(Program));
и используя это где-то еще так:
log4net.GlobalContext.Properties["App"] = Startup.Configuration.GetSection("Log4NetConfigFile");
Program._log.Info("It works my friends");
Но яне в состоянии что-либо войти.
Я пытался настроить его, ориентируясь на этот учебник , но больше всего у меня возникли проблемы с преобразованием из xml app.config
/ web.config
в мои appsettings.json
и log4net.config
.Моя строка подключения к моей базе данных postgres также должна быть в порядке.Я установил точку останова в PostgresAppender
, но она не срабатывает при запуске журнала, поэтому я думаю, что это должно что-то делать с настройкой.Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.