无法使用 log4javascript 将客户端日志发送到服务器 (Asp.net Web API)
Unable to send client side log to server (Asp.net Web API) using log4javascript
要求:
添加客户端日志并将其发送到服务器。服务器中的开发人员应该能够启用或禁用此日志记录功能。
我的方法:
我创建了一个 ASP.NET WebAPI 项目,我在其中创建了一个 POST 方法来将日志数据写入本地文件。所以,我可以添加和监控客户端日志。
现在,我无法从客户端调用 post 方法。我用过 log4javascript。我有 AjaxAppender 向服务器发送请求。
使用log4javascript的JS代码:
// Create the logger
var log = log4javascript.getLogger();
// Create a AjaxAppender with default options
var ajaxAppender = new log4javascript.AjaxAppender('http://localhost:59132/api/log');
// If you want to send JSON
var jsonLayout = new log4javascript.JsonLayout();
// Add configuration for ajaxAppender
//ajaxAppender.setThreshold(log4javascript.Level.ERROR); // Sets the appender's threshold. Log messages of level less severe than this threshold will not be logged.
//ajaxAppender.setBatchSize(10); // Sets the number of log messages to send in each request.
//ajaxAppender.sendAll(); // send all remaining messages on window.beforeunload()
ajaxAppender.addHeader("Content-Type", "application/json");
ajaxAppender.setLayout(jsonLayout);
// Adds the given appender
log.addAppender(ajaxAppender);
// Log message
log.debug("Debug");
log.info("Info");
log.warn("Warning");
log.error("Error");
log.fatal("Fatal");
服务器端代码:
[HttpPost]
public void Post([FromBody]List<string> value)
{
string path = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
foreach(string s in value)
{
using (StreamWriter writetext = new StreamWriter(path, true))
{
writetext.WriteLine("Log: " + s.ToString() + " " + DateTime.Now);
}
}
}
此外,
使用 jQuery Ajax 我可以发送日志消息,但我认为我不应该在我的项目中实现它,因为我将日志存储在一个数组中并且我没有任何配置设置(即我将无法启用和禁用 JS 日志记录功能)。
JS 代码使用 jQuery Ajax:
$(document).ready(function (){
var logArr = [];
logArr.push("Error - XYZ " + "URL: " + window.location.href);
logArr.push("Info - PQRS " + "URL: " + window.location.href);
logArr.push("Warning - MNOP " + "URL: " + window.location.href);
sendError(logArr)
});
function sendError(message) {
$.ajax({
url: "/api/log",
type: 'POST',
async: true,
data: JSON.stringify(message),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function () {
console.log("Success");
},
error: function (e) {
console.log("Failure " + e.message);
}
});
}
log4JS、JSNLog可以解决吗?请在这里指导我。
注意:我们不会使用任何错误跟踪工具,例如:errlytics、rollbar 等。因为它们是付费的。
我是JSNLog的作者
JSNLog 包含 .Net 的服务器端端点,它将记录到您最喜欢的日志记录包(Serilog、Log4Net 等)。它同时支持 ASP.NET CORE 和 ASP.NET 框架(非- ASP.NET 的核心版本)。它有许多很棒的(在我看来有偏见的)特性:
http://jsnlog.com
我知道您想让服务器端开发人员控制服务器端日志记录。使用 JSNLog,可以使用 server 端代码控制 client 端记录器。有关其工作原理的详细信息,请参阅:
http://jsnlog.com/Documentation/Configuration/OnServer
要求: 添加客户端日志并将其发送到服务器。服务器中的开发人员应该能够启用或禁用此日志记录功能。
我的方法: 我创建了一个 ASP.NET WebAPI 项目,我在其中创建了一个 POST 方法来将日志数据写入本地文件。所以,我可以添加和监控客户端日志。
现在,我无法从客户端调用 post 方法。我用过 log4javascript。我有 AjaxAppender 向服务器发送请求。
使用log4javascript的JS代码:
// Create the logger
var log = log4javascript.getLogger();
// Create a AjaxAppender with default options
var ajaxAppender = new log4javascript.AjaxAppender('http://localhost:59132/api/log');
// If you want to send JSON
var jsonLayout = new log4javascript.JsonLayout();
// Add configuration for ajaxAppender
//ajaxAppender.setThreshold(log4javascript.Level.ERROR); // Sets the appender's threshold. Log messages of level less severe than this threshold will not be logged.
//ajaxAppender.setBatchSize(10); // Sets the number of log messages to send in each request.
//ajaxAppender.sendAll(); // send all remaining messages on window.beforeunload()
ajaxAppender.addHeader("Content-Type", "application/json");
ajaxAppender.setLayout(jsonLayout);
// Adds the given appender
log.addAppender(ajaxAppender);
// Log message
log.debug("Debug");
log.info("Info");
log.warn("Warning");
log.error("Error");
log.fatal("Fatal");
服务器端代码:
[HttpPost]
public void Post([FromBody]List<string> value)
{
string path = AppDomain.CurrentDomain.BaseDirectory + "Log.txt";
foreach(string s in value)
{
using (StreamWriter writetext = new StreamWriter(path, true))
{
writetext.WriteLine("Log: " + s.ToString() + " " + DateTime.Now);
}
}
}
此外, 使用 jQuery Ajax 我可以发送日志消息,但我认为我不应该在我的项目中实现它,因为我将日志存储在一个数组中并且我没有任何配置设置(即我将无法启用和禁用 JS 日志记录功能)。
JS 代码使用 jQuery Ajax:
$(document).ready(function (){
var logArr = [];
logArr.push("Error - XYZ " + "URL: " + window.location.href);
logArr.push("Info - PQRS " + "URL: " + window.location.href);
logArr.push("Warning - MNOP " + "URL: " + window.location.href);
sendError(logArr)
});
function sendError(message) {
$.ajax({
url: "/api/log",
type: 'POST',
async: true,
data: JSON.stringify(message),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function () {
console.log("Success");
},
error: function (e) {
console.log("Failure " + e.message);
}
});
}
log4JS、JSNLog可以解决吗?请在这里指导我。
注意:我们不会使用任何错误跟踪工具,例如:errlytics、rollbar 等。因为它们是付费的。
我是JSNLog的作者
JSNLog 包含 .Net 的服务器端端点,它将记录到您最喜欢的日志记录包(Serilog、Log4Net 等)。它同时支持 ASP.NET CORE 和 ASP.NET 框架(非- ASP.NET 的核心版本)。它有许多很棒的(在我看来有偏见的)特性: http://jsnlog.com
我知道您想让服务器端开发人员控制服务器端日志记录。使用 JSNLog,可以使用 server 端代码控制 client 端记录器。有关其工作原理的详细信息,请参阅: http://jsnlog.com/Documentation/Configuration/OnServer