gpt4 book ai didi

.net - 如何从头开始以编程方式配置 log4net(无配置)

转载 作者:行者123 更新时间:2023-12-03 05:07:49 25 4
gpt4 key购买 nike

我知道这是一个坏主意,但是......我想从头开始以编程方式配置 log4net,无需配置文件。我正在为我和我的团队开发一个简单的日志记录应用程序,用于我们负责的一堆相对较小的部门应用程序。我希望它们都记录到同一个数据库。日志记录应用程序只是 log4net 的包装器,并预先配置了 AdoNetAppender。

所有应用程序都是 ClickOnce 部署的,这在部署配置文件时出现了一个小问题。如果配置文件是核心项目的一部分,我可以设置其属性以与程序集一起部署。但它是链接应用程序的一部分,因此我无法选择将其与主应用程序一起部署。 (如果这不是真的,请有人告诉我)。

可能因为这是一个坏主意,所以似乎没有太多可用于从头开始以编程方式配置 log4net 的示例代码。这是我到目前为止所拥有的。

Dim apndr As New AdoNetAppender()
apndr.CommandText = "INSERT INTO LOG_ENTRY (LOG_DTM, LOG_LEVEL, LOGGER, MESSAGE, PROGRAM, USER_ID, MACHINE, EXCEPTION) VALUES (@log_date, @log_level, @logger, @message, @program, @user, @machine, @exception)"
apndr.ConnectionString = connectionString
apndr.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
apndr.CommandType = CommandType.Text
Dim logDate As New AdoNetAppenderParameter()
logDate.ParameterName = "@log_date"
logDate.DbType = DbType.DateTime
logDate.Layout = New RawTimeStampLayout()
apndr.AddParameter(logDate)
Dim logLevel As New AdoNetAppenderParameter()
logLevel.ParameterName = "@log_level"
'And so forth...

配置完apndr的所有参数后,我首先尝试了这个......

Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy)
hier.Root.AddAppender(apndr)

没成功。然后,作为一次黑暗中的尝试,我尝试了这个。

BasicConfigurator.Configure(apndr)

这也不起作用。有人对如何在没有配置文件的情况下从头开始以编程方式配置 log4net 有任何好的引用吗?

最佳答案

这是一个示例类,它完全用代码创建 log4net 配置。我应该提到,通过静态方法创建记录器通常被认为是不好的,但在我的上下文中,这就是我想要的。无论如何,您可以分割代码来满足您的需求。

using log4net;
using log4net.Repository.Hierarchy;
using log4net.Core;
using log4net.Appender;
using log4net.Layout;

namespace dnservices.logging
{
public class Logger
{
private PatternLayout _layout = new PatternLayout();
private const string LOG_PATTERN = "%d [%t] %-5p %m%n";

public string DefaultPattern
{
get { return LOG_PATTERN; }
}

public Logger()
{
_layout.ConversionPattern = DefaultPattern;
_layout.ActivateOptions();
}

public PatternLayout DefaultLayout
{
get { return _layout; }
}

public void AddAppender(IAppender appender)
{
Hierarchy hierarchy =
(Hierarchy)LogManager.GetRepository();

hierarchy.Root.AddAppender(appender);
}

static Logger()
{
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
TraceAppender tracer = new TraceAppender();
PatternLayout patternLayout = new PatternLayout();

patternLayout.ConversionPattern = LOG_PATTERN;
patternLayout.ActivateOptions();

tracer.Layout = patternLayout;
tracer.ActivateOptions();
hierarchy.Root.AddAppender(tracer);

RollingFileAppender roller = new RollingFileAppender();
roller.Layout = patternLayout;
roller.AppendToFile = true;
roller.RollingStyle = RollingFileAppender.RollingMode.Size;
roller.MaxSizeRollBackups = 4;
roller.MaximumFileSize = "100KB";
roller.StaticLogFileName = true;
roller.File = "dnservices.txt";
roller.ActivateOptions();
hierarchy.Root.AddAppender(roller);

hierarchy.Root.Level = Level.All;
hierarchy.Configured = true;
}

public static ILog Create()
{
return LogManager.GetLogger("dnservices");
}
}

}

关于.net - 如何从头开始以编程方式配置 log4net(无配置),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/769983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com