c# - Log4net 没有将数据插入到 oracle 数据库中?
问题描述
我尝试使用 log4net 将信息记录到数据库中,但我现在坚持使用它。不确定我做错了什么。无论我发送的任何消息都没有在数据库中收到,都没有显示任何错误
我的 logger.config 下面。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<appSettings>
<add key="log4net.Internal.Debug" value="true "/>
</appSettings>
<log4net>
<root>
<level value="ALL"/>
<appender-ref ref="AdoNetAppender_Oracle"/>
<appender-ref ref="WebInformaction" />
<appender-ref ref="WebError" />
<appender-ref ref="AdoNetAppender"/>
</root>
<appender name="WebInformaction" type="log4net.Appender.AdoNetAppender, log4net">
<connectionType value="Oracle.ManagedDataAccess.Client.OracleConnection, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
<connectionString value="Mydatasource" />
<commandText value="INSERT INTO EVENTS_LOG (ID,LOG_DATE,THREAD,LOG_LEVEL,LOGGER,MESSAGE,EXCEPTION) VALUES (EVENTS_LOG_SEQ.nextval, :log_date, :thread, :log_level, :logger, :message, :exception)"/>
<bufferSize value="0"/>
<parameter>
<parameterName value=":log_date"/>
<dbType value="DateTime"/>
<layout type="log4net.Layout.RawTimeStampLayout"/>
</parameter>
<parameter>
<parameterName value=":thread"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread"/>
</layout>
</parameter>
<parameter>
<parameterName value=":log_level"/>
<dbType value="String"/>
<size value="50"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level"/>
</layout>
</parameter>
<parameter>
<parameterName value=":logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger"/>
</layout>
</parameter>
<parameter>
<parameterName value=":message"/>
<dbType value="String"/>
<size value="4000"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message"/>
</layout>
</parameter>
<parameter>
<parameterName value=":exception"/>
<dbType value="String"/>
<size value="2000"/>
<layout type="log4net.Layout.ExceptionLayout"/>
</parameter>
</appender>
<logger name="Informaction">
<level value="All"/>
<appender-ref ref="Informaction" />
</logger>
</log4net>
</configuration>
访问它的代码:
using AuditResourcesTool.Common;
using AuditResourcesTool.Common.Attributes;
using AuditResourcesTool.Common.Enums;
using AuditResourcesTool.Common.Extensions;
using AuditResourcesTool.Common.Models;
using AuditResourcesTool.Common.Services;
using log4net;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace AuditResourcesTool.Web.Controllers
{
[ErrorHandler]
// GET: Base
public class BaseController : Controller
{
// public readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public ILog Log = LogManager.GetLogger(typeof(BaseController));
public ILog ErrorLog = LogManager.GetLogger("Error");
public ILog InfoLog = LogManager.GetLogger("Informaction");
public void Warning(string message)
{
//logger.Warn(message);
InfoLog.Warn(message);
AddToTempData(Alerts.WARNING.ToLabel(), message);
}
public void Success(string message)
{
//ogger.Info(message);
InfoLog.Info(message);
AddToTempData(Alerts.SUCCESS.ToLabel(), message);
}
public void Information(string message)
{
//logger.Info(message);
InfoLog.Info(message);
AddToTempData(Alerts.INFORMATION.ToLabel(), message);
}
public void Error(string message)
{
//logger.Error(message);
ErrorLog.Error(message);
AddToTempData(Alerts.ERROR.ToLabel(), message);
}
public void AddToTempData(string type, string message)
{
if (TempData.ContainsKey(type))
{
TempData[type] = TempData[type] + Environment.NewLine + message;
}
else
{
TempData.Add(type, message);
}
}
public ActionResult Authorize()
{
return RedirectToAction("Index", "Study");
}
public bool IsLoggedIn()
{
return SessionService.GetObject(Constants.USER_SESSION_KEY) != null
&& (SessionService.GetObject(Constants.USER_SESSION_KEY) is UserModel);
}
public UserModel GetCurrentUser()
{
return this.IsLoggedIn() ? (SessionService.GetObject(Constants.USER_SESSION_KEY) as UserModel) : null;
}
public HttpCookie SetCookie(string identity)
{
var cookie = new HttpCookie(Constants.USER_SESSION_KEY, identity);
cookie.Expires = DateTime.Now.AddDays(10);
Response.SetCookie(cookie);
return cookie;
}
public string GetCookie()
{
var cookie = Request.Cookies[Constants.USER_SESSION_KEY];
if (cookie != null)
return cookie.Value;
return null;
}
public void Remove()
{
if (Request.Cookies.AllKeys.Contains(Constants.USER_SESSION_KEY))
{
HttpCookie cookie = this.ControllerContext.HttpContext.Request.Cookies[Constants.USER_SESSION_KEY];
cookie.Expires = DateTime.Now.AddDays(-1);
Response.Cookies.Add(cookie);
}
}
}
}
我的日志表:
CREATE TABLE EVENTS_LOG
(
ID NUMBER(10, 0) NOT NULL
, LOG_DATE TIMESTAMP(3)
, THREAD VARCHAR2(255 BYTE)
, LOG_LEVEL VARCHAR2(50 BYTE)
, LOGGER VARCHAR2(255 BYTE)
, MESSAGE VARCHAR2(4000 BYTE)
, EXCEPTION VARCHAR2(2000 BYTE)
);
如果有人在我犯错的地方帮助我,那就太好了。提前致谢
解决方案
推荐阅读
- php - 使用友好的 url 更改 .htacces 时无法获取变量
- azure - 如何从 Microsoft Graph 获取 Azure 用户列表?
- mysql - 如何使用 Sequelize 从不同的表中插入/查找由外键相关的行?
- firebase - Exists() 不适用于第二个变量 Cloud Firestore 规则
- curl - 将 curl 转换为 pycurl
- c++ - 模板函数在模板化对象上执行成员回调而不提供它的实例
- yii2 - 如何获得更广泛的工具提示输出
- python - 游戏图像识别(在 Flappy Bird 中识别得分或游戏结束)
- asp.net-mvc - Webpack 4.6 不使用引导程序 4.1 呈现
- javascript - Angular - 在json中的对象内显示对象