我知道这不是个好主意,但是. 我想从头开始以编程方式配置log4net,不使用配置文件.我正在为我和我的团队开发一个简单的日志(log)记录应用程序,用于我们负责的一些相对较小的部门应用程序.我希望他们都登录到同一个数据库.日志(log)记录应用程序只是预先配置了ADONetAppender的log4net的包装器.

所有应用程序都部署了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的所有参数后,我首先try 了这个.

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

没用.然后,在黑暗中,我try 了这个.

BasicConfigurator.Configure(apndr)

那也没用.关于如何在没有配置文件的情况下从头开始以编程方式配置log4net,有人有什么好的参考资料吗?

推荐答案

我过go 做过的一种方法是将配置文件作为嵌入式资源包含进来,只使用了log4net.Config.Configure(Stream)个.

这样,我就可以使用我熟悉的配置语法,而不必担心部署文件的问题.

.net相关问答推荐

在 .NET 7 项目上设置 Sentry 时遇到问题

是否有内置方法将 nuget 包引用为 csproj 中的文件?

如何查询 DOTNET_CLI_TELEMETRY_OPTOUT 是否永久设置为 TRUE?

EGC / 文本元素上的 .NET String.Split

无法加载文件或程序集 不支持操作. (来自 HRESULT 的异常:0x80131515)

每当属性值发生变化时引发事件?

C#字符串的GetHashCode()是如何实现的?

如何使用 Moq 为不同的参数设置两次方法

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

.NET 等价于旧的 vb left(string, length) 函数

Microsoft.Practices.ServiceLocation 来自哪里?

Int 到字节数组

如何比较 C# 中的(目录)路径?

CryptographicException 未处理:系统找不到指定的文件

如果选中,则更改列表框项的 WPF DataTemplate

如何在 C# 中使用迭代器反向读取文本文件

将控制台输出镜像到文件

我可以为 Dictionary 条目使用集合初始化程序吗?

.NET Remoting 真的被弃用了吗?

在 Windows 窗体上绘制单个像素