C# 无法使用log4javascript将客户端日志发送到服务器(Asp.net Web API)

C# 无法使用log4javascript将客户端日志发送到服务器(Asp.net Web API),c#,logging,log4javascript,jsnlog,C#,Logging,Log4javascript,Jsnlog,要求: 添加客户端日志并将其发送到服务器。服务器中的开发人员应该能够启用或禁用此日志记录功能 我的方法: 我创建了一个ASP.NET WebAPI项目,在该项目中,我创建了一个POST方法来将日志数据写入本地文件。因此,我可以添加和监视客户端日志 现在,从客户端我无法调用post方法。我使用了log4javascript。我让AjaxAppender向服务器发送请求 JS代码使用log4javascript: // Create the logger var log = log4javascri

要求: 添加客户端日志并将其发送到服务器。服务器中的开发人员应该能够启用或禁用此日志记录功能

我的方法: 我创建了一个ASP.NET WebAPI项目,在该项目中,我创建了一个POST方法来将日志数据写入本地文件。因此,我可以添加和监视客户端日志

现在,从客户端我无法调用post方法。我使用了log4javascript。我让AjaxAppender向服务器发送请求

JS代码使用log4javascript:

// 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);
        }
    }
}
$(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);
    }
});
}
服务器端代码:

// 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);
        }
    }
}
$(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核心和ASP.Net框架(ASP.Net的非核心版本)。它有许多伟大的(我有偏见的)特点:

我知道您想让服务器端开发人员控制服务器端日志记录。使用JSNLog,可以使用服务器端代码控制客户端记录器。有关其工作原理的详细信息,请参阅:

谢谢你的回答。我已经在我的项目中实现了JSNLog。它的工作就像一个冠军。嗨,马特,我在MVC应用程序.NET4.5中实现JSNLog时遇到了一个问题,你能在这里帮助我吗。裁判: