Я пытаюсь настроить ведение журнала в моей программе ввода-вывода, используя log4javascript
.Получить имя функции класса внутри себя
Однако я понятия не имею, как получить имена функций с помощью отражения (вместо ввода вручную).
В идеале я хочу подражать, что я делаю в C#
:
public class Foo
{
private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(typeof(Foo));
public Foo()
{
}
public FooMethod()
{
try {
logger.Logger.Log(this.GetType(), log4net.Core.Level.Trace, "Entering" + MethodBase.GetCurrentMethod().Name, null);
// code
}
catch (e) {
logger.Logger.Log(this.GetType(), log4net.Core.Level.Debug, ex.Message, null);
}
finally {
logger.Logger.Log(this.GetType(), log4net.Core.Level.Trace, "Exiting" + MethodBase.GetCurrentMethod().Name, null);
}
}
}
Как я могу это сделать в Typescript
? Все, что я могу сделать, это получить имя класса.
class Foo {
private static logger: log4javascript.Logger = log4javascript.getLogger(getName(Foo));
constructor() {
}
FooFunction() {
try {
SymDataSource.logger.trace("Entering: " + getName(Foo.prototype.FooFunction));
// code
} catch (e) {
SymDataSource.logger.debug("Exception: " + getName(Foo.prototype.FooFunction), e);
} finally {
SymDataSource.logger.trace("Exiting: " + getName(Foo.prototype.FooFunction));
}
}
}
function getName(obj: any): string {
if (obj.name) {
return obj.name;
}
var funcNameRegex = /function (.{1,})\(/;
var results = (funcNameRegex).exec((<any> obj).constructor.toString());
return (results && results.length > 1) ? results[1] : "";
}
Имя класса возвращается правильно, но функции возвращаются как «Функция».
возможно дубликат [Как получить имя типа объекта в JavaScript?] (Http://stackoverflow.com/questions/332422/how-do-i-get-the-name-of -an-objects-type-in-javascript) или [Получить объекты Имя класса во время выполнения в TypeScript] (http://stackoverflow.com/questions/13613524/get-an-objects-class-name-at-runtime- in-typescript) – Fenton
Определены ли определенные типы для log4javascript ?? Я ждал их! –
Я написал их сам. Загрузите в репозиторий, но не успели написать необходимые тестовые классы. – Tim