[转]log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
本文转自:http://www.cnblogs.com/weiweictgu/p/5848805.html
1、升级到log4net的最新版
PM下执行
- Install-Package log4net
还是无法解决的,使用下面的方法
2、使用Nlog替换之,详见https://github.com/NLog/NLog/wiki/Tutorial
安装
- Install-Package NLog.Config
NLog使用方法比log4net更为简单,配置文件如下,如果成windows程序需将NLog.config自动复制到bin下面

- 1 <?xml version="1.0" encoding="utf-8" ?>
- 2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
- 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 4 xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
- 5 autoReload="true"
- 6 throwExceptions="false"
- 7 internalLogLevel="Off" internalLogFile="F:\temp\20160907\NLog\log\nlog-internal.log">
- 8
- 9 <!-- optional, add some variables
- 10 https://github.com/nlog/NLog/wiki/Configuration-file#variables
- 11 -->
- 12 <variable name="myvar" value="myvalue"/>
- 13
- 14 <!--
- 15 See https://github.com/nlog/nlog/wiki/Configuration-file
- 16 for information on customizing logging rules and outputs.
- 17 -->
- 18 <targets>
- 19
- 20 <!--
- 21 add your targets here
- 22 See https://github.com/nlog/NLog/wiki/Targets for possible targets.
- 23 See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
- 24 -->
- 25
- 26 <!--
- 27 Write events to a file with the date in the filename.
- 28 <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
- 29 layout="${longdate} ${uppercase:${level}} ${message}" />
- 30 -->
- 31 <target name="logfile" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" />
- 32 <target name="console" xsi:type="ColoredConsole" />
- 33 </targets>
- 34
- 35 <rules>
- 36 <!-- add your logging rules here -->
- 37
- 38 <!--
- 39 Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
- 40 <logger name="*" minlevel="Debug" writeTo="f" />
- 41 -->
- 42 <logger name="*" minlevel="Debug" writeTo="logfile" />
- 43 <logger name="*" minlevel="Info" writeTo="console" />
- 44 </rules>
- 45 </nlog>

调用代码:

- 1 Logger logger = LogManager.GetCurrentClassLogger();
- 2
- 3
- 4 logger.Trace("Sample trace message");
- 5 logger.Debug("Sample debug message");
- 6 logger.Info("Sample informational message");
- 7 logger.Warn("Sample warning message");
- 8 logger.Error("Sample error message");
- 9 logger.Fatal("Sample fatal error message");
- 10
- 11
- 12 logger.Info("wilson测试 日志日期:{0}", DateTime.Now);

执行结果,非常漂亮的控制台输出:
web站点配置log写入到sql server数据库,需要安装NLog.Web
- Install-Package NLog.Web
配置文件如下

- 1 <?xml version="1.0" encoding="utf-8" ?>
- 2 <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
- 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- 4 xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
- 5 autoReload="true"
- 6 throwExceptions="false"
- 7 internalLogLevel="Off" internalLogFile="F:\temp\20160907\NLog\log\nlog-internal.log">
- 8
- 9 <!-- optional, add some variables
- 10 https://github.com/nlog/NLog/wiki/Configuration-file#variables
- 11 -->
- 12 <variable name="myvar" value="myvalue"/>
- 13
- 14 <!--
- 15 See https://github.com/nlog/nlog/wiki/Configuration-file
- 16 for information on customizing logging rules and outputs.
- 17 -->
- 18 <targets>
- 19
- 20 <!--
- 21 add your targets here
- 22 See https://github.com/nlog/NLog/wiki/Targets for possible targets.
- 23 See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
- 24 -->
- 25
- 26 <!--
- 27 Write events to a file with the date in the filename.
- 28 <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
- 29 layout="${longdate} ${uppercase:${level}} ${message}" />
- 30 -->
- 31 <target name="logfile" xsi:type="File" fileName="${basedir}/logs/${shortdate}.log" />
- 32 <target name="console" xsi:type="ColoredConsole" />
- 33
- 34 <target name="db"
- 35 xsi:type="Database"
- 36 connectionStringName="NLogConn"
- 37 commandType="StoredProcedure"
- 38 commandText="[dbo].[NLog_AddEntry_p]"
- 39 >
- 40 <parameter name="@machineName" layout="${machinename}" />
- 41 <parameter name="@siteName" layout="${iis-site-name}" />
- 42 <parameter name="@logged" layout="${date}" />
- 43 <parameter name="@level" layout="${level}" />
- 44 <parameter name="@username" layout="${aspnet-user-identity}" />
- 45 <parameter name="@message" layout="${message}" />
- 46 <parameter name="@logger" layout="${logger}" />
- 47 <parameter name="@properties" layout="${all-event-properties:separator=|}" />
- 48 <parameter name="@serverName" layout="${aspnet-request:serverVariable=SERVER_NAME}" />
- 49 <parameter name="@port" layout="${aspnet-request:serverVariable=SERVER_PORT}" />
- 50 <parameter name="@url" layout="${aspnet-request:serverVariable=HTTP_URL}" />
- 51 <parameter name="@https" layout="${when:inner=1:when='${aspnet-request:serverVariable=HTTPS}' == 'on'}${when:inner=0:when='${aspnet-request:serverVariable=HTTPS}' != 'on'}" />
- 52 <parameter name="@serverAddress" layout="${aspnet-request:serverVariable=LOCAL_ADDR}" />
- 53 <parameter name="@remoteAddress" layout="${aspnet-request:serverVariable=REMOTE_ADDR}:${aspnet-request:serverVariable=REMOTE_PORT}" />
- 54 <parameter name="@callSite" layout="${callsite}" />
- 55 <parameter name="@exception" layout="${exception:tostring}" />
- 56 </target>
- 57
- 58
- 59 </targets>
- 60
- 61 <rules>
- 62 <!-- add your logging rules here -->
- 63
- 64 <!--
- 65 Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
- 66 <logger name="*" minlevel="Debug" writeTo="f" />
- 67 -->
- 68 <logger name="*" minlevel="Debug" writeTo="logfile" />
- 69 <logger name="*" minlevel="Info" writeTo="console" />
- 70
- 71 <logger name="*" minlevel="Debug" writeTo="db" />
- 72 </rules>
- 73 </nlog>

Web.Config要加上对应数据库连接

- <?xml version="1.0" encoding="utf-8"?>
- <!--
- 有关如何配置 ASP.NET 应用程序的详细信息,请访问
- http://go.microsoft.com/fwlink/?LinkId=169433
- -->
- <configuration>
- <connectionStrings>
- <add name="NLogConn" connectionString="Server=.;uid=sa;pwd=sa;Database=db;"/>
- </connectionStrings>
- <system.web>
- <compilation debug="true" targetFramework="4.0" />
- </system.web>
- </configuration>

保存数据库结果:
写入oracle的配置,使用System.Data.OracleClient,.net 4.0以上已经抛弃

- 1 <targets>
- 2 <target name="oraclelog" type="Database">
- 3
- 4 <dbProvider>System.Data.OracleClient.OracleConnection,System.Data.OracleClient, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</dbProvider>
- 5
- 6 <connectionString>Data Source=JMDB_215;User ID=TYUM_UM; Password=DEV_TYUM_UM;</connectionString>
- 7
- 8 <commandText>insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message)</commandText>
- 9
- 10 <parameter name=":log_user" layout="${aspnet-user-identity}"/>
- 11 <parameter name=":log_level" layout="${level}"/>
- 12 <parameter name=":log_date" layout="${date}"/>
- 13 <parameter name=":log_message" layout="${message}"/>
- 14
- 15 </target>
- 16 </targets>
- 17 <rules>
- 18 <logger name="*" minlevel="Debug" writeTo="oraclelog" />
- 19 </rules>

写入oracle的配置,使用Oracle.DataAccess.Client,配置文件如下:

- 1 <targets>
- 2 <target name="oraclelog" type="Database">
- 3
- 4 <!--<dbProvider>Oracle.ManagedDataAccess.Client,Oracle.ManagedDataAccess</dbProvider>-->
- 5 <dbProvider>Oracle.DataAccess.Client.OracleConnection,Oracle.DataAccess</dbProvider>
- 6 <connectionString>Data Source=orcl;User ID=oracle_user; Password=password;</connectionString>
- 7
- 8 <commandText>insert into RS_LOGTABLE (log_user,log_level,log_date,log_message) values(:log_user,:log_level,:log_date,:log_message)</commandText>
- 9
- 10 <parameter name=":log_user" layout="${machinename}"/>
- 11 <parameter name=":log_level" layout="${level}"/>
- 12 <parameter name=":log_date" layout="${date}"/>
- 13 <parameter name=":log_message" layout="${message}"/>
- 14
- 15 </target>
- 16 </targets>
- 17
- 18 <rules>
- 19 <logger name="oracleDbLog" minlevel="Debug" writeTo="oraclelog" />
- 20 </rules>

C#调用代码:
- Logger oracleLogger = LogManager.GetLogger("oracleDbLog");
- oracleLogger.Error(new Exception("自定义异常oracle"), "错误信息 oracledb", string.Empty);
执行结果:
写入Mysql,需应用MySql.Data程序集,安装Install-Package MySql.Data -Version 6.9.9,配置文件如下:

- 1 <targets>
- 2 <target name="MySQLLog" type="Database">
- 3 <dbProvider>MySql.Data.MySqlClient.MySqlConnection,MySql.Data</dbProvider>
- 4 <connectionString>Server=192.168.0.2;Uid=root;Pwd=root;Database=mydb;</connectionString>
- 5
- 6 <commandText>insert into t_nlog (log_user,log_level,log_date,log_message) values(@log_user,@log_level,@log_date,@log_message)</commandText>
- 7
- 8 <parameter name="@log_user" layout="${machinename}"/>
- 9 <parameter name="@log_level" layout="${level}"/>
- 10 <parameter name="@log_date" layout="${date}"/>
- 11 <parameter name="@log_message" layout="${message}"/>
- 12 </target>
- 13 </targets>
- 14
- 15 <rules>
- 16 <logger name="*" minlevel="Debug" writeTo="MySQLLog" />
- 17 </rules>

执行结果:
文件日志异常模板:
- <target name="logfile" xsi:type="File" fileName="${basedir}/nlogs/${shortdate}.log" layout="${longdate}|${level}||${logger} ${message}| ${exception:format=tostring}" />
NLog日志写入到MongoDB,安装NLog.Mongo
PM> Install-Package NLog.Mongo
配置文件:

- 1 <extensions>
- 2 <add assembly="NLog.Mongo"/>
- 3 </extensions>
- 4
- 5 <target xsi:type="Mongo"
- 6 name="mongoDefault"
- 7 connectionString="mongodb://192.168.0.226:6111/NLogging"
- 8 collectionName="DefaultLog"
- 9 cappedCollectionSize="26214400">
- 10 <property name="ThreadID" layout="${threadid}" bsonType="Int32" />
- 11 <property name="ThreadName" layout="${threadname}" />
- 12 <property name="ProcessID" layout="${processid}" bsonType="Int32" />
- 13 <property name="ProcessName" layout="${processname:fullName=true}" />
- 14 <property name="UserName" layout="${windows-identity}" />
- 15 </target>
- 16
- 17 <rules>
- 18
- 19 <logger name="*" level="Debug" writeTo="mongoDefault" />
- 20 </rules>

执行结果如下:
参考:https://github.com/loresoft/NLog.Mongo
[转]log4net 发布到生产环境不写日志的解决方法--使用 NLog日志的更多相关文章
- log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
1.升级到log4net的最新版 PM下执行 Install-Package log4net 还是无法解决的,使用下面的方法 2.使用Nlog替换之,详见https://github.com/NLog ...
- Asp.Net 应用程序在IIS发布后无法连接oracle数据库问题的解决方法
asp.net程序编写完成后,发布到IIS,经常出现的一个问题是连接不上Oracle数据库,具体表现为Oracle的本地NET服务配置成功:用 pl/sql 等工具也可以连接上数据库,但是通过浏览器中 ...
- 利用ansible-playbook从测试环境获取tomcat中java项目新版本发布到生产环境
一.环境描述 安装有ansible的服务器:192.168.13.45 测试环境服务器:192.168.13.49 /home/app/api-tomcat/webapps/api.war为测试环境新 ...
- Vue 生产环境(production) 打开 调试工具的方法
总所周知,在production生产环境下,点击vue插件会显示, 并且按F12是没办法使用调试工具的,这样非常不方便 其实是有一个办法的,那就是复制下面的js,然后在控制台执行 代码中已经写清楚执行 ...
- 修改vue的配置项支持生产环境下二级目录访问的方法
本文主要记录如何配置vue的打包文件配置项,使打包后的文件可以支持二级目录的访问. 1.常规打包 在实际的项目中,我们通常都使用 npm run build 直接打包文件后丢到服务器上访问 打包后的文 ...
- ORA-00257归档日志写满的解决方法
背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我成功设定数据库为归档模式以后, 第二天再次尝试连接数据库,报错:ORA-00257.在网上找到了一圈资 ...
- 大数据学习系列之八----- Hadoop、Spark、HBase、Hive搭建环境遇到的错误以及解决方法
前言 在搭建大数据Hadoop相关的环境时候,遇到很多了很多错误.我是个喜欢做笔记的人,这些错误基本都记载,并且将解决办法也写上了.因此写成博客,希望能够帮助那些搭建大数据环境的人解决问题. 说明: ...
- (转)ORA-00257归档日志写满的解决方法
转自:http://www.cnblogs.com/xwdreamer/p/3804509.html 背景: 在前一篇博客中我们提到了如何启动或关闭oracle的归档(ARCHIVELOG)模式,在我 ...
- oracle归档日志写满错误解决方法
最近一年,手头上负责的项目要部署到很多个地方,由于项目组里没有人对oracle比较熟悉,只能给自己增加一个DBA的角色了.由于短时间内要部署很多单位,备份策略没有设置好,结果过了一个月,用户报告程序开 ...
随机推荐
- netcore中使用bower还原出错的解决方法
近期BitAdminCore框架在创建时,还原bower包出现502错 打开地址,发现原为是因为bower服务调整导致的. 果断处理: 1.通过管理员模式,启动命令行 2.进入npm所在目录 3.执行 ...
- php 编译代码
编译其实就是把所有的代码整合在于一个文件,减少文件包含时间,加快php解析,虽然优化后时间上提升了不多,但能优化便多多少少进行优化.下面给一个编译例子,从而引申. // 定义编译状态 define(' ...
- 2018-2019 20165219 网络对抗 Exp5 MSF基础
实验内容 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体需要完成: 1.1一个主动攻击实践,如ms08_067; (1分) 1.2 一个针对浏览器的攻击,如ms ...
- Problem D: GJJ的日常之暴富梦(水题)
Contest - 河南省多校连萌(四) Problem D: GJJ的日常之暴富梦 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 693 Solve ...
- idea IDE 导入的项目没有显示目录结构
解决方法:1.关闭 idea 2.删除该项目录下的 .idea 文件 3.重新 open 项目
- 【FAQ】Maven 本地仓库明明有jar包,pom文件还是报错解决办法
方法一: 找到出错的jar包文件位置,删掉_maven.repositories文件 方法二: maven中的本地仓库的index索引没有更新导致 解决方案: 在eclipse中打开菜单 window ...
- day4. python学习之字典
字典和列表是最常用的数据类型,字典是一种key-value的数据类型,用{ }表示 1.字典的特性:无序的,没有下标 2.字典的使用:增删改查 info = { '20181101':"zh ...
- 直接线性变换解法(DLT)用于标定相机
直接线性变换法是建立像点坐标和相应物点物方空间坐标之间直接的线性关系的算法.特点:不需要内外方位元素:适合于非量测相机:满足中.低精度的测量任务:可以标定单个相机. 1 各坐标系之间的关系推导直接线性 ...
- CentOS 7 安装程序介绍
(一).引导菜单 使用 UEFI 引导 Install CentOS Linux 7 选择此选项开始在你的计算机系统中使用图形安装程序安装 CentOS 7 Test this media & ...
- JSONP-跨域读取数据
页面代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...