Wie kann ich log4net mit Unity3d verwenden, so dass die Protokollausgabe zur Editor-Konsole geht und in der Datei protokolliert wird? Unity scheint nicht in der Lage zu sein, eine App.config zu verwenden, daher muss die Konfiguration im Code erfolgen, aber wie schreibe ich in die unity-Konsole, wenn ich log4net verwende?Wie benutzt man log4net mit Unity?
Antwort
Fügen Sie zuerst einen Verweis auf die log4net
DLL im Unity-Editor hinzu. Sie können dies tun, indem Sie die log4net-DLLs in das Verzeichnis Assets/Plugins
oder in ein untergeordnetes Verzeichnis des Verzeichnisses Assets/Plugins/
platzieren.
Sobald auf log4net
verwiesen wird, müssen Sie nun die Appender einrichten, damit log4net weiß, wie die Protokollierung tatsächlich gestartet wird. Dies ist, was ich für meine Konfiguration haben:
/// <summary>
/// Configure logging to write to Logs\EventLog.txt and the Unity console output.
/// </summary>
public static void ConfigureAllLogging()
{
var patternLayout = new PatternLayout
{
ConversionPattern = "%date %-5level %logger - %message%newline"
};
patternLayout.ActivateOptions();
// setup the appender that writes to Log\EventLog.txt
var fileAppender = new RollingFileAppender
{
AppendToFile = false,
File = @"Logs\EventLog.txt",
Layout = patternLayout,
MaxSizeRollBackups = 5,
MaximumFileSize = "1GB",
RollingStyle = RollingFileAppender.RollingMode.Size,
StaticLogFileName = true
};
fileAppender.ActivateOptions();
var unityLogger = new UnityAppender
{
Layout = new PatternLayout()
};
unityLogger.ActivateOptions();
BasicConfigurator.Configure(unityLogger, fileAppender);
}
Diese log4net einrichtet zu Logs\EventLog.txt
Protokollierung und zur Einheit der Konsole Protokollierung über die UnityAppender
Klasse. Die UnityAppender
Klasse sieht so aus (ich es als eine private innere Klasse):
/// <summary> An appender which logs to the unity console. </summary>
private class UnityAppender : AppenderSkeleton
{
/// <inheritdoc />
protected override void Append(LoggingEvent loggingEvent)
{
string message = RenderLoggingEvent(loggingEvent);
if (Level.Compare(loggingEvent.Level, Level.Error) >= 0)
{
// everything above or equal to error is an error
Debug.LogError(message);
}
else if (Level.Compare(loggingEvent.Level, Level.Warn) >= 0)
{
// everything that is a warning up to error is logged as warning
Debug.LogWarning(message);
}
else
{
// everything else we'll just log normally
Debug.Log(message);
}
}
}
Dann sollten Sie ConfigureAllLogging()
irgendwo nennen, wo Sie es wissen, genannt wird. Ich habe es in einem statischen Konstruktor eines meiner globalen Monobehavoirs gesetzt.
- 1. Wie man Automapper mit Einheitsabhängigkeitseinspritzung benutzt?
- 2. wieder über log4net und Unity IOC config
- 3. Wie protokolliert man Trace-Nachrichten mit log4net?
- 4. Wie benutzt man Resources.getFraction()?
- 5. Wie benutzt man JProgressBar?
- 6. Wie benutzt man ADBannerView?
- 7. Wie man ModelMultipleChoiceFilter benutzt?
- 8. Wie benutzt man pg_stat_activity?
- 9. Wie benutzt man Jquery?
- 10. Wie benutzt man TailCalls?
- 11. Wie benutzt man TCharHelper?
- 12. Wie benutzt man history.js?
- 13. Wie benutzt man Split?
- 14. Wie benutzt man will_paginate?
- 15. Wie benutzt man HorizontalScrollView?
- 16. Wie benutzt man ActionMenuView?
- 17. Wie benutzt man org.netbeans.swing.outline?
- 18. Wie benutzt man onResume()?
- 19. Wie benutzt man TextAction
- 20. Wie man openssl mit busybox httpd benutzt?
- 21. Wie benutzt man pgFouine mit PostgreSQL 9.1?
- 22. Wie benutzt man GLEW mit Qt?
- 23. Wie benutzt man Noreturn mit Funktionszeiger?
- 24. Wie man jquery ui mit Laube benutzt?
- 25. Wie benutzt man Module mit Zend_Application?
- 26. Wie benutzt man Django mit GWT?
- 27. Wie benutzt man ViewActions mit Befehlen?
- 28. Wie benutzt man autobahn.ws mit django?
- 29. Wie benutzt man Alamofire mit Facebook Login?
- 30. Wie benutzt man Stetho mit Volley?
Ein schönes Arbeitsbeispiel. Beachten Sie, dass es empfehlenswert ist, DLLs in das Verzeichnis Assets \ Plugins zu legen. –
@ NikolaMalešević Guter Punkt. Ich habe die Antwort aktualisiert, um stattdessen auf Assets \ Plugins zu zeigen. – FriendlyGuy
Alte Post, frage mich, ob es noch am Leben ist :) Sie müssen immer noch die log4net Logger richtig verwenden, so auf jedem Skript, das Protokollierung benötigt: 'code private statische readonly log4net.ILog log = log4net.LogManager.GetLogger (System .Reflection.MethodBase.GetCurrentMethod() .DemplingType); ' und dann: ' code log.Debug ("das ist meine Debug-Nachricht"); log.Error ("das ist meine Fehlermeldung"); log.Fatal ("das ist meine fatale Nachricht"); log.Warn ("das ist meine Warnmeldung"); ' Sorry konnte dies nicht richtig formatieren – bomanden