2014-10-01 120 views
2

我有兩個單獨的xml文件用於配置log4Net。一個是登錄到一個文件,另一個是登錄到控制檯。我控制哪些文件被我的Global.asax.cs文件在Application_Start()方法來讀取:log4Net沒有按預期記錄到控制檯

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
    //Initialize Log4Net 
    XmlConfigurator.Configure(new System.IO.FileInfo("C:\\temp2\\DataTables_Examples\\DataTables_Examples\\Console.config")); 
    log.Info("Initializing Log4Net..."); 
    Debug.WriteLine("MvcApplication - Initializing Log4Net..."); 

} 

當我運行使用配置爲寫入文件的XML文件我的web應用程序,它完美罰款給我以下輸出:

2014-10-01 13:34:56,596 [6] ERROR CSED.Database 
Error Number: 0 
Error Code: -2147467259 
Message: Authentication to host 'localhost' for user 'webapp' using method 'mysql_native_password' failed with message: Access denied for user 'webapp'@'localhost' (using password: YES) 
Source: MySql.Data 
StackTrace: at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.AuthenticationFailed(Exception ex) 
    at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.ReadPacket() 
    at MySql.Data.MySqlClient.Authentication.MySqlAuthenticationPlugin.Authenticate(Boolean reset) 
    at MySql.Data.MySqlClient.NativeDriver.Authenticate(String authMethod, Boolean reset) 
    at MySql.Data.MySqlClient.NativeDriver.Open() 
    at MySql.Data.MySqlClient.Driver.Open() 
    at MySql.Data.MySqlClient.Driver.Create(MySqlConnectionStringBuilder settings) 
    at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection() 
    at MySql.Data.MySqlClient.MySqlPool..ctor(MySqlConnectionStringBuilder settings) 
    at MySql.Data.MySqlClient.MySqlPoolManager.GetPool(MySqlConnectionStringBuilder settings) 
    at MySql.Data.MySqlClient.MySqlConnection.Open() 
    at CSED.Database.createMySqlConnection(String connectionString) in c:\DataTables\CSED\CSED\Database.cs:line 395 

這就好了。我故意更改了web.config中連接字符串的密碼,以便拋出此異常。然後我嘗試配置log4Net登錄到控制檯,我期望得到相同的輸出。不!爲控制檯

我的配置文件看起來像這樣:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 
    <log4net>  
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <!-- ConsoleAppender uses PatternLayout --> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %c %m%n" />   
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    </log4net> 
</configuration> 

沒有什麼不尋常那裏。

爲了比較,這是用於登錄到文件的配置。這工作:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 
    <log4net>  
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
     <file value="C:\\temp2\\DataTables_Examples\\DataTables_Examples\\log.txt"/> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %c %m%n" />   
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    </log4net> 
</configuration> 

然而,當我跑我的web應用程序,我得到如下:

log4net: log4net assembly [log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a]. Loaded from [C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\ff9156a3\74c0a06a\assembly\dl3\c94489ac\1765076f_58c5cf01\log4net.dll]. (.NET Runtime [4.0.30319.18444] on Microsoft Windows NT 6.1.7601 Service Pack 1) 
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net: Creating repository for assembly [DataTables_Examples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net: Assembly [DataTables_Examples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\ff9156a3\74c0a06a\assembly\dl3\898de284\55bca487_97ddcf01\DataTables_Examples.dll] 
log4net: Assembly [DataTables_Examples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net: Assembly [DataTables_Examples, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: configuring repository [log4net-default-repository] using file [C:\temp2\DataTables_Examples\DataTables_Examples\Console.config] 
log4net: configuring repository [log4net-default-repository] using stream 
log4net: loading XML configuration 
log4net: Configuring Repository [log4net-default-repository] 
log4net: Configuration update mode [Merge]. 
log4net: Logger [root] Level string is [DEBUG]. 
log4net: Logger [root] level set to [name="DEBUG",value=30000]. 
log4net: Loading Appender [ConsoleAppender] type: [log4net.Appender.ConsoleAppender] 
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Setting Property [ConversionPattern] to String value [%d [%t] %-5p %c %m%n] 
log4net: Converter [d] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [t] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [] ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [p] Option [] Format [min=5,max=2147483647,leftAlign=True] 
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [c] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [m] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [n] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Setting Property [Layout] to object [log4net.Layout.PatternLayout] 
log4net: Created Appender [ConsoleAppender] 
log4net: Adding appender named [ConsoleAppender] to logger [root]. 
log4net: Hierarchy Threshold [] 
MvcApplication - Initializing Log4Net... 
log4net: Creating repository for assembly [CSED, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null] 
log4net: Assembly [CSED, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\ff9156a3\74c0a06a\assembly\dl3\d3a2a365\45b5ee3b_90ddcf01\CSED.dll] 
log4net: Assembly [CSED, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net: Assembly [CSED, Version=1.3.0.0, Culture=neutral, PublicKeyToken=null] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy] 
log4net: repository [log4net-default-repository] already exists, using repository type [log4net.Repository.Hierarchy.Hierarchy] 
Database - connection string name: LocalMySqlServer 
Database - connString: port=3306;server=localhost;user id=webapp;password=foobar;database=editor;pooling=True;minpoolsize=2;maxpoolsize=4 
BasicSSPController - Processing... 
A first chance exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll 

的Console.config文件肯定是被log4net的讀入。那麼,爲什麼不打印輸出到控制檯,就像它在登錄文件時一樣?兩者的conversionPattern都相同。我所得到的只是控制檯底部的一行。我在某處失去了某些東西。

+0

愚蠢的想法,但你有任何機會啓動您的控制檯應用程序的方式,重定向到另一個進程的標準輸出? ConsoleAppender是唯一受影響的? – samy 2014-10-01 21:31:47

回答

0

你的一個程序集似乎也使用log4net。也許這裏有衝突。

... 
log4net: Creating repository for assembly [CSED... 
... 
log4net: Creating repository for assembly [DataTables_Examples... 
... 
log4net: repository [log4net-default-repository] already exists... 
... 
+0

我已經創建了一個dll項目,這個web應用程序正在引用。該dll項目被稱爲CSED.dll。它也使用log4Net來捕獲異常,但我根本沒有初始化log4Net。只有在Web應用程序中,我可以這麼做。我真的不明白這個「存儲庫」的東西,爲什麼它正在爲CSED.dll創建一個,而另一個爲web應用程序創建。如果只有一個存儲庫,那麼我該如何解決這個問題? – Alan 2014-10-01 19:03:59

+0

a)你可以發佈你的工作log4net部分進行比較嗎? b)您的appsettings中是否激活了log4net內部日誌記錄? (類似於: )如果是這樣,您可以關閉它。 c)這是同樣的問題嗎?(http://stackoverflow.com/questions/22596406/exception-when-adding-log4net-config) – celper 2014-10-01 19:46:31

+0

是的我做了那個設置爲true。我將它設置爲false,然後再次運行webapp。但它沒有改變任何東西。 – Alan 2014-10-01 19:56:19