這是一個(gè)壞主意,我知道,但是...我想從頭開始以編程方式配置log4net,沒有配置文件。我正在為我和我的團(tuán)隊(duì)開發(fā)一個(gè)簡(jiǎn)單的日志記錄應(yīng)用程序,用于我們負(fù)責(zé)的一些相對(duì)較小的部門應(yīng)用程序。我希望他們都登錄到同一個(gè)數(shù)據(jù)庫。日志記錄應(yīng)用程序只是log4net的一個(gè)包裝器,預(yù)先配置了AdoNetAppender。所有應(yīng)用程序都是ClickOnce部署的,這對(duì)部署配置文件提出了一個(gè)小問題。如果配置文件是核心項(xiàng)目的一部分,我可以設(shè)置其屬性以使用程序集進(jìn)行部署。但它是鏈接應(yīng)用程序的一部分,因此我無法選擇將其與主應(yīng)用程序一起部署。(如果那不是真的,請(qǐng)有人告訴我)??赡芤?yàn)樗且粋€(gè)壞主意,似乎沒有太多的示例代碼可用于從頭開始以編程方式配置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...配置完所有參數(shù)后apndr,我首先嘗試了這個(gè)...Dim hier As Hierarchy = DirectCast(LogManager.GetRepository(), Hierarchy)hier.Root.AddAppender(apndr)它沒用。然后,在黑暗中拍攝,我嘗試了這個(gè)。BasicConfigurator.Configure(apndr)那也行不通。有沒有人對(duì)如何在沒有配置文件的情況下從頭編程配置log4net有任何好的參考?
3 回答

慕尼黑的夜晚無繁華
TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
更簡(jiǎn)潔的解決方案:
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);
不要忘記調(diào)用ActivateOptions方法:
在設(shè)置配置屬性后,必須在此對(duì)象上調(diào)用ActivateOptions方法。在調(diào)用ActivateOptions之前,此對(duì)象處于未定義狀態(tài),不得使用。
- 3 回答
- 0 關(guān)注
- 593 瀏覽
添加回答
舉報(bào)
0/150
提交
取消