我正在使用log4javascript来记录和跟踪我的JavaScript代码中的问题.我以前见过类似的日志记录辅助工具,但我很难理解应该如何使用这些日志级别更有用和更有效.
大多数时候,我最终记录调试,信息或跟踪,而不是真正意识到它们的效率与否.随着代码变得越来越大,它变得越来越难,我觉得日志比帮助更麻烦.
有人可以给我一些指导/帮助,以便我可以很好地使用日志记录机制.
以下是log4javascript支持的不同日志级别:
log4javascript.Level.ALLlog4javascript.Level.TRACElog4javascript.Level.DEBUGlog4javascript.Level.INFOlog4javascript.Level.WARNlog4javascript.Level.ERRORlog4javascript.Level.FATAL我想使用 log4javascript 记录对象。例如,考虑以下代码:
function LogObject() {
var blah = {
one: 42,
two: "486"
};
logger.Info(blah);
Run Code Online (Sandbox Code Playgroud)
假设 logger 是正确设置的 log4javascript logger 的实例:
var logger = log4javascript.getLogger("InternalLogger");
var ajaxAppender = new log4javascript.AjaxAppender(url),
jsonLayout = new log4javascript.JsonLayout(false, false);
ajaxAppender.setLayout(jsonLayout);
ajaxAppender.addHeader("Content-Type", "application/json");
logger.addAppender(ajaxAppender);
Run Code Online (Sandbox Code Playgroud)
我期待结果如下:请求有效负载包含消息数组,其中首先是我的对象序列化为 JSON。我看到的是消息数组,其中首先包含字符串“Object object”(例如调用了 toString() 方法)。我怎样才能做到这一点?
我有个问题?在Angularjs项目中,我可以用什么日志写入文件?Angular或log4javascript的$ log.我有Angularjs的$ log代码配置:
$log.getInstance = function (context) {
return {
log: enhanceLogging($log.log, context),
info: enhanceLogging($log.info, context),
warn: enhanceLogging($log.warn, context),
debug: enhanceLogging($log.debug, context),
error: enhanceLogging($log.error, context)
};
};
function enhanceLogging(loggingFunc, context) {
return function () {
var modifiedArguments = [].slice.call(arguments);
modifiedArguments[0] = [moment().format("dddd h:mm:ss a") + '::[' + context + ']: '] + modifiedArguments[0];
loggingFunc.apply(null, modifiedArguments);
};
}
Run Code Online (Sandbox Code Playgroud)
它工作,但它只写入控制台,现在我想将日志输出到文件?
我正在使用log4javascript版本1.4.3.
在我的应用程序中,它适用于除trace之外的所有日志级别.为了简化问题并确保问题不在我的应用程序中,我使用作者示例代码作为示例并添加了setThreshold(log4javascript.TRACE),然后添加了一行来生成跟踪条目(我也删除了他的例子中只与ajaxAppender相关的行只留下了popUpAppender).
当我运行代码时,错误和调试消息出现在log4javascript popUp窗口中,但没有跟踪消息.
显然,我没有正确理解跟踪级别的使用或跟踪消息的配置.如果有人可以指出我的方式错误,那么我可以修复我的应用程序日志记录.
下面失败的示例代码.
<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>log4javascript example from manual</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<meta name="author" content="Tim Down - tim@log4javascript.org" />
<meta name="description" content="log4javascript, a logging framework for JavaScript based on log4j" />
<meta name="robots" content="all" />
<script type="text/javascript" src="/tracker/libraries/log4javascript.js"></script>
<script type="text/javascript">
//<![CDATA[
var log = log4javascript.getLogger();
var popUpAppender = new log4javascript.PopUpAppender();
var popUpLayout = new …Run Code Online (Sandbox Code Playgroud) 我受到我的webservice的限制:它需要一个json-payload!
所以,做点什么
var ajaxAppender = new log4javascript.AjaxAppender("clientLogger");
var jsonLayout = new log4javascript.JsonLayout();
ajaxAppender.setLayout(jsonLayout);
log.addAppender(ajaxAppender);
Run Code Online (Sandbox Code Playgroud)
将无法工作,因为它在forms-collection(data和layout)中创建了两个键.
如何使用内置选项获取json-payload?
我正在尝试在我的打字稿程序中设置日志记录,使用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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点Typescript?我所能做的就是获取类名。
class Foo {
private static logger: log4javascript.Logger = log4javascript.getLogger(getName(Foo));
constructor() {
}
FooFunction() {
try {
SymDataSource.logger.trace("Entering: " + getName(Foo.prototype.FooFunction));
// code …Run Code Online (Sandbox Code Playgroud)