为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕容3067478 2019-08-31 15:42:18
这是一个坏主意,我知道,但是...我想从头开始以编程方式配置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 = connectionStringapndr.ConnectionType = "System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"apndr.CommandType = CommandType.TextDim logDate As New AdoNetAppenderParameter()logDate.ParameterName = "@log_date"logDate.DbType = DbType.DateTimelogDate.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有任何好的参考?
查看完整描述

3 回答

?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

更简洁的解决方案:


var layout = new PatternLayout("%-4timestamp [%thread] %-5level %logger %ndc - %message%newline");

var appender = new RollingFileAppender {

    File = "my.log",

    Layout = layout

};

layout.ActivateOptions();

appender.ActivateOptions();

BasicConfigurator.Configure(appender);

不要忘记调用ActivateOptions方法:


在设置配置属性后,必须在此对象上调用ActivateOptions方法。在调用ActivateOptions之前,此对象处于未定义状态,不得使用。


查看完整回答
反对 回复 2019-08-31
  • 3 回答
  • 0 关注
  • 540 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信