2016-04-13 9 views
0

Ich schreibe eine Konsolenanwendung und möchte Protokollnachrichten an das Windows-Ereignisprotokoll (auf meinem Windows 10-Laptop) senden. Ich kann anscheinend keine Nachrichten an das Ereignisprotokoll senden. Ich bin jedoch in der Lage, log4net zu erhalten, um Textdateien und die Konsole zu schreiben. Hier ist meine app.config-Datei:Wie Log4Net in EventLog in der Konsolenanwendung schreiben?

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 

    <log4net> 

    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > 
     <param name="File" value="game-playtest-log-file.txt" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" > 
     <param name="LogName" value="GamePlayTestLog" /> 
     <param name="ApplicationName" value="GamePlayTest" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 

    <appender name="colored-console" type="log4net.Appender.ColoredConsoleAppender"> 
     <mapping> 
     <level value="INFO" /> 
     <foreColor value="White, HighIntensity" /> 
     <backColor value="Green" /> 
     </mapping> 
     <mapping> 
     <level value="DEBUG" /> 
     <foreColor value="White, HighIntensity" /> 
     <backColor value="Blue" /> 
     </mapping> 
     <mapping> 
     <level value="WARN" /> 
     <foreColor value="Yellow, HighIntensity" /> 
     <backColor value="Purple" /> 
     </mapping> 
     <mapping> 
     <level value="ERROR" /> 
     <foreColor value="Yellow, HighIntensity" /> 
     <backColor value="Red" /> 
     </mapping> 

     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date --- %message%newline%newline"/> 
     </layout> 
    </appender> 

    <root> 
     <appender-ref ref="LogFileAppender"/> 
     <appender-ref ref="EventLogAppender"/> 
     <appender-ref ref="colored-console" /> 
     <priority value="DEBUG" /> 
     <level value="ALL"/> 
    </root> 

    </log4net> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

Hier ist die mein Logging-Code-I-Tests sind mit:

log4net.Config.XmlConfigurator.Configure(); 
Logger.log.Info("Launching " + options.Input); 
Logger.log.Debug("TestDebugMsg"); 
Logger.log.Fatal("TestFatalMsg"); 

Hier ist mein Logger Klasse:

using log4net; 

namespace GamePlayTest 
{ 
    public static class Logger 
    { 
     public static readonly ILog log = LogManager.GetLogger(typeof(Logger)); 
    } 
} 

Nach den Apache FAQ Dieses Problem ist häufig darauf zurückzuführen, dass das Protokoll als Administrator erstellt werden muss. Ich habe den GamePlayTestLog manuell mit einer GamePlayTest-Quelle über den Befehl New-EventLog erstellt. GamePlayTestLog wird im Ereignisprotokoll mit null Ereignissen angezeigt. Die Nachrichten gehen jedoch zur Textdatei und zur Konsole.

Ich vermute, dass das Problem mit der Quelle zu tun hat, weil ich keine Möglichkeit kenne, es zu setzen. Ich habe nur gehofft, dass die Verwendung des exe-Namens als Quelle funktionieren würde. Es gibt einige verwandte Webseiten und S/O-Artikel, aber alle sind sehr veraltet. Ich habe Code aus here versucht. Ich habe auch Beispiele von GitHub ausprobiert, hatte aber keinen Erfolg. Ich habe das Gefühl, etwas Offensichtliches zu vermissen.

Ich habe die Konsolenanwendung (GamePlayTest.exe) von einer PowerShell-Sitzung ausgeführt, die als Administrator gestartet wurde. Hier ist der interne log4net Protokollinhalt:

log4net: log4net assembly [log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=**********]. Loaded from [C:\Users\fores\git\game-playtest-tool\GamePlayTest\bin\x64\Release\log4net.dll]. (.NET Runtime [4.0.30319.42000] on Microsoft Windows NT 6.2.9200.0) 
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy] 
log4net: Creating repository for assembly [GamePlayTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] 
log4net: Assembly [GamePlayTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] Loaded From [C:\Users\fores\git\game-playtest-tool\GamePlayTest\bin\x64\Release\GamePlayTest.exe] 
log4net: Assembly [GamePlayTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null] does not have a RepositoryAttribute specified. 
log4net: Assembly [GamePlayTest, 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 .config file section 
log4net: Application config file is [C:\Users\fores\git\game-playtest-tool\GamePlayTest\bin\x64\Release\GamePlayTest.exe.Config] 
log4net: Configuring Repository [log4net-default-repository] 
log4net: Configuration update mode [Merge]. 
log4net: Loading Appender [LogFileAppender] type: [log4net.Appender.RollingFileAppender] 
log4net: Setting Property [File] to String value [game-playtest-log-file.txt] 
log4net: Setting Property [AppendToFile] to Boolean value [True] 
log4net: Setting Property [RollingStyle] to RollingMode value [Size] 
log4net: Setting Property [MaxSizeRollBackups] to Int32 value [10] 
log4net: Setting Property [MaximumFileSize] to String value [10MB] 
log4net: Setting Property [StaticLogFileName] to Boolean value [True] 
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 [%date [%thread] %-5level %logger [%property{NDC}] - %message%newline] 
log4net: Converter [date] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [thread] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [] ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [level] Option [] Format [min=5,max=2147483647,leftAlign=True] 
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [logger] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [property] Option [NDC] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [] - ] Format [min=-1,max=2147483647,leftAlign=False] 
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 [Layout] to object [log4net.Layout.PatternLayout] 
log4net: Searched for existing files in [C:\Users\fores\git\game-playtest-tool\GamePlayTest\bin\x64\Release] 
log4net: curSizeRollBackups starts at [0] 
log4net: Opening file for writing [C:\Users\fores\git\game-playtest-tool\GamePlayTest\bin\x64\Release\game-playtest-log-file.txt] append [True] 
log4net: Created Appender [LogFileAppender] 
log4net: Adding appender named [LogFileAppender] to logger [root]. 
log4net: Loading Appender [EventLogAppender] type: [log4net.Appender.EventLogAppender] 
log4net: Setting Property [LogName] to String value [GamePlayTestLog] 
log4net: Setting Property [ApplicationName] to String value [GamePlayTest] 
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 [%date [%thread] %-5level %logger [%property{NDC}] - %message%newline] 
log4net: Converter [date] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [thread] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [] ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [level] Option [] Format [min=5,max=2147483647,leftAlign=True] 
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [logger] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [property] Option [NDC] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [] - ] Format [min=-1,max=2147483647,leftAlign=False] 
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 [Layout] to object [log4net.Layout.PatternLayout] 
log4net: Source [GamePlayTest] is registered to log [] 
log4net: Created Appender [EventLogAppender] 
log4net: Adding appender named [EventLogAppender] to logger [root]. 
log4net: Loading Appender [colored-console] type: [log4net.Appender.ColoredConsoleAppender] 
log4net: Setting Property [Level] to Level value [INFO] 
log4net: Setting Property [ForeColor] to Colors value [White, HighIntensity] 
log4net: Setting Property [BackColor] to Colors value [Green] 
log4net: Setting Collection Property [AddMapping] to object [log4net.Appender.ColoredConsoleAppender+LevelColors] 
log4net: Setting Property [Level] to Level value [DEBUG] 
log4net: Setting Property [ForeColor] to Colors value [White, HighIntensity] 
log4net: Setting Property [BackColor] to Colors value [Blue] 
log4net: Setting Collection Property [AddMapping] to object [log4net.Appender.ColoredConsoleAppender+LevelColors] 
log4net: Setting Property [Level] to Level value [WARN] 
log4net: Setting Property [ForeColor] to Colors value [Yellow, HighIntensity] 
log4net: Setting Property [BackColor] to Colors value [Purple] 
log4net: Setting Collection Property [AddMapping] to object [log4net.Appender.ColoredConsoleAppender+LevelColors] 
log4net: Setting Property [Level] to Level value [ERROR] 
log4net: Setting Property [ForeColor] to Colors value [Yellow, HighIntensity] 
log4net: Setting Property [BackColor] to Colors value [Red] 
log4net: Setting Collection Property [AddMapping] to object [log4net.Appender.ColoredConsoleAppender+LevelColors] 
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 [%date --- %message%newline%newline] 
log4net: Converter [date] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [literal] Option [ --- ] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False] 
log4net: Setting Property [Layout] to object [log4net.Layout.PatternLayout] 
log4net: Created Appender [colored-console] 
log4net: Adding appender named [colored-console] to logger [root]. 
log4net: Logger [root] Level string is [DEBUG]. 
log4net: Logger [root] level set to [name="DEBUG",value=30000]. 
log4net: Logger [root] Level string is [ALL]. 
log4net: Logger [root] level set to [name="ALL",value=-2147483648]. 
log4net: Hierarchy Threshold [] 
log4net: Shutdown called on Hierarchy [log4net-default-repository] 

Hier ist eine Beispielzeile aus der Protokolldatei:

2016-04-13 17:27:52,098 [1] INFO GamePlayTest.Logger - Launching C:\Program Files (x86)\Devotion\DevotionWin.exe 
+1

Debuggen oder Ausführen der EXE? – raven

+0

Hallo @RobertoDeLaParra, ich führe die Exe aus einer PowerShell-Sitzung im Verwaltungsmodus. Die Exe ist ein 64-Bit-Release-Build. –

+1

hat die .exe den genauen Namen als ApplicationName GamePlayTest.exe in der App.config? – raven

Antwort

1

Wenn ein benutzerdefiniertes Ereignisprotokoll verwenden, müssen Sie den Ereignisprotokoll-Dienst neu starten, um für es sich richtig zeigen.

1

Nur das Erstellen des Ereignisprotokolls muss mit Administratorrechten ausgeführt werden. Stellen Sie bei der Verwendung von New-EventLog sicher, dass der Parameter -LogName dem Parameter 'LogName' in log4net config entspricht und der Parameter -Source dem `ApplicationName'-Parameter in log4net config entspricht.

Wenn der Protokolleintrag erstellt wird, benötigt die Anwendung selbst keine Administratorrechte für die Anmeldung am Windows-Ereignisprotokoll. Nachdem Sie das Ereignisprotokoll erstellt, EventViewer geschlossen und erneut geöffnet haben, sollte der Eintrag unter dem Knoten Applications and Services Logs in der Strukturansicht angezeigt werden.

Verwandte Themen