Konfiguracja Log4Net w zewnętrznym pliku nie działa
Używamy log4net i chcemy określić jego konfigurację w zewnętrznym pliku konfiguracyjnym (tak jak to zrobiliśmy w innych sekcjach). W tym celu zmieniliśmy sekcję log4net w aplikacji.config to:
...
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...
I w Dzienniku.Plik konfiguracyjny (ten sam katalog co aplikacja.config) mamy:
<log4net>
<appender name="General" type="log4net.Appender.FileAppender">
<file value="myapp.log" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<appender-ref ref="General" />
</root>
</log4net>
Jednak, gdy uruchamiamy aplikację, nie jest tworzony plik dziennika(i nie jest rejestrowane). Nie ma żadnych komunikatów o błędach wysyłanych do konsoli.
Jeśli przeniesiemy zawartość dziennika.plik konfiguracyjny powrót do aplikacji.config (zastąpienie pierwszej linii kodu powyżej), działa zgodnie z oczekiwaniami. Jakiś pomysł, dlaczego nie działa w zewnętrznym pliku?
12 answers
Czy masz następujący atrybut w pliku AssemblyInfo.cs
:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
I kod w ten sposób na początku każdej klasy wymagającej funkcji logowania:
private static readonly ILog log =
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Mam wpis na blogu zawierający to i inne informacje tutaj .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-07 10:29:06
Istnieje wada Otwarta w tej kwestii. Log4Net nie obsługuje atrybutu configSource elementów konfiguracyjnych. Aby użyć wyłącznie pliku konfiguracyjnego używasz log4net.Klucz konfiguracji w appSettings.
Krok 1: Dołącz normalną definicję sekcji konfiguracji:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
Krok 2: Użyj magicznego log4net.Klucz konfiguracji w appSettings.
<appSettings>
<add key="log4net.Config" value="log4net.simple.config" />
</appSettings>
Krok 3: Dodaj łatkę poprawiającą obsługę configSource.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-25 20:10:16
Krok, który został pominięty to
log4net.Config.XmlConfigurator.Configure();
Spowoduje to użycie configSource. Upewnij się, że wywołasz go raz, zanim wywołasz GetLogger ();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-11 21:09:40
Upewnij się, że Twój log4net.plik konfiguracyjny ma następujące właściwości:
Build Action: Content
Kopiuj do katalogu wyjściowego: Kopiuj zawsze
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-07-28 12:38:56
Albo użyć,
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<appSettings>
<add key="log4net.Config" value="Log4Net.config" />
</appSettings>
Lub po prostu
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("Log4Net.config"));
W obu przypadkach plik Log4Net.config, powinien być tam w katalogu wyjściowym. Możesz to zrobić, ustawiając Log4Net.właściwości pliku konfiguracyjnego w Eksploratorze rozwiązań. Tworzenie akcji-Content i kopiowanie do katalogu wyjściowego-Copy always
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 13:46:18
Zakładając, że masz zewnętrzny plik konfiguracyjny o nazwie log4net.config skopiowany do katalogu deploy można skonfigurować tak:
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Reflection;
using log4net;
namespace MyAppNamespace {
static class Program {
//declare it as static and public so all classes in the project can access it
//like so: Program.log.Error("got an error");
public static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main() {
//configure it to use external file
log4net.Config.XmlConfigurator.Configure(new Uri(Application.StartupPath + "\\log4net.config"));
//use it
log.Debug("############# STARING APPLICATION #################");
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new FormMain());
}
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-24 10:29:52
Uważaj na ten problem...
W moim przypadku wszystko zostało poprawnie skonfigurowane. Problem polega na tym, że użyłem Web Deploy wewnątrz Visual Studio 2013, aby przesłać stronę do WinHost.com i resetuje ACLs na serwerze. To z kolei unieważniło wszystkie Uprawnienia folderów i plików-log4net nie mógł zapisać pliku.
Możesz przeczytać więcej na ten temat tutaj:
Jak zatrzymać Web Deploy / MSBuild od zakłócania uprawnień serwera
I asked the zespół wsparcia tam, aby zresetować ACLs, a następnie log4net zaczął pluć dzienniki. :)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-07 18:26:44
Możliwe jest również włączenie trybu debugowania dla log4net
. Wstaw to do aplikacji.plik konfiguracyjny:
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="link\to\your\file.log" />
</listeners>
</trace>
</system.diagnostics>
I otrzymasz przynajmniej komunikaty o błędach, z których możesz wyciągnąć, co dokładnie poszło nie tak. W moim przypadku po prostu zapomniałem ustawić Copy to output directory
na Copy Always
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-31 08:22:02
@ Mitch, okazuje się, że jest plik z [assembly:...] deklaracja, ale nie posiada właściwości ConfigFile.
Raz dodałem i wskazałem na Log.config, zaczęło działać. Myślałem, że to będzie działać jak wszystkie inne sekcje config (ie AppSettings) i akceptować zewnętrzne pliki config bez modyfikacji.
Nie mamy drugiego Oświadczenia, o którym wspomniałeś, ponieważ zawijamy je w globalnego dostawcę dziennika statycznego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-01-15 08:21:07
Miałem ten sam problem, poza tym miałem
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net")]
W uruchomionym projekcie miałem również następującą linijkę w projekcie referencyjnym:
[assembly: log4net.Config.XmlConfigurator]
Kiedy usunąłem ten wiersz w odwołanych projektach, logi zaczynają się pojawiać.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-21 14:03:03
W moim przypadku dostałem komunikat o błędzie:
log4net: config file [C:\........\bin\Debug\log4net.config] not found.
Oraz log4net.config
plik był w projekcie Visual Studio 2017, ale kiedy sprawdziłem plik w bin\Debug
folder nie mogłem go znaleźć.
Mój oryginalny montaż był taki:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
Po pewnym czasie badań, zmieniam go na następujący i działa:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"..\..\log4net.config", Watch = true)]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-16 22:42:07
- Dodaj następujący tekst do AssemblyInfo.cs
[Montaż: log4net.Config.XmlConfigurator(ConfigFile = " Log4Net.config")]
- Upewnij się, że log4net.config jest zawarty w projekcie
- we właściwościach log4net.config
Zmień Copy to Output Dirctory na Copy if newer
- Double check log level level value= " ALL "
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-10 13:16:39