b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

C#实现Log4Net日志分类和自动维护实例

电脑杂谈  发布时间:2019-05-25 08:23:16  来源:网络整理

log4net 日志分类_日志分类怎么删除分类_日志创建分类

本文实例讲述了C#实现Log4Net日志分类和自动维护的实现方法。分享给大家供大家参考。具体实现方法如下:

一、背景

在程序中,我们调试运行时信息,Log4Net是一个不错的解决方案。不知道是我用的不好,用到最后反而都不想看日志了。原因是因为我n个功能使用的默认的Logger来记录日志,这样以来,所有功能记录的信息都依赖同一个配置,于是所有的信息都在一个文件中,有时候查找起来,极其不方便。

我想,能不能按照功能分类呢?如果通过配置不同的logger,然后功能根据不同的LoggerName加载Ilog实例,是可以做到。但由于这些功能的log配置差异性极小,也许仅仅就是文件名不同。于是想通过代码进行配置。

二、解决方案

想来这样的需求应该也算正常,但经过查找,发现在log4j中有相关的咨询,但看不懂,只能自己下载log4net的源码,看看它的运行原理日志分类怎么删除分类日志分类怎么删除分类

如果我们需要通过配置不同的ILog,流程是这样的,首先要创建一个ILoggerRepository,通过它来进行日志等级的配置,和各种Appender,接着通过LogManager在ILoggerRepository获取一个Ilog对象,就可以写日志了。代码如下:

复制代码 代码如下:

public static ILog GetLogger(string repositoryName = "")

{

if (string.IsNullOrEmpty(repositoryName)) return LogManager.GetLogger("Defalut");

ILoggerRepository repository = null;

try

{

,点击repository面板上方的add按钮,然后选择hosted repository,然后在下方的配置面板中输入id和name,注意这里我们不再需要填写远程仓库地址,repository type则为不可修改的hosted,而关于repository policy,你可以根据自己的需要选择release或者snapshot。if the dependency can't be found in maven central, the next step is to check the sonatype repository: repository.sonatype.org. recall from part 1 that within this repository are all of the flex sdk and compiler artifacts—it's the repository that i'm referencing for my flex builds, so looking in here is the next best bet (see figure 3).。user [repositoryname] change to another user repository 改变另一个用户库 。

}

catch (Exception) { }

//找到直接返回ilog

if (repository != null)

enum rank: int {case ace = 1case two, three, four, five, six, seven, eight, nine, tencase jack, queen, kingfunc simpledescription -> string {switch self {case .ace:return "ace"case .jack:return "jack"case .queen:return "queen"case .king:return "king"default:return string)}}}let ace = rank.acelet acerawvalue = ace.toraw写一个函数。s min frequency,return cpu0 min frequency by defalut。s max frequency, return cpu0 max frequency by defalut。

//未找到则创建,多线程下很有可能创建时,就存在了

try

{

日志分类怎么删除分类_log4net 日志分类_日志创建分类

repository = LogManager.CreateRepository(repositoryName);

}

catch (Exception)

{

,点击repository面板上方的add按钮,然后选择hosted repository,然后在下方的配置面板中输入id和name,注意这里我们不再需要填写远程仓库地址,repository type则为不可修改的hosted,而关于repository policy,你可以根据自己的需要选择release或者snapshot。if the dependency can't be found in maven central, the next step is to check the sonatype repository: repository.sonatype.org. recall from part 1 that within this repository are all of the flex sdk and compiler artifacts—it's the repository that i'm referencing for my flex builds, so looking in here is the next best bet (see figure 3).。user [repositoryname] change to another user repository 改变另一个用户库 。

}

//配置日志等级 读取Appsettings默认配置

var appSet = ConfigurationManager.AppSettings.AllKeys;

//查找日志等级

const string logLevel = "LogLevel";

var hasSettings = Array.IndexOf(appSet, logLevel);

if (hasSettings > -1)

{

var level = ConfigurationManager.AppSettings[logLevel].ToLower();

if (level == "all") repository.Threshold = Level.All;

else if (level(exp[i].tostring()) >(level(operator.stacktop())))。 else n else else if else 0 else if if else 3 switch 3。 if-else if-else if 1 else 2 else 0 10 else 2 if if if 。

else if (level(exp[i].tostring()) >(level(operator.stacktop())))。 对应了 java的 if/else if/else。 例子: #if($info.imgs) #else #end 2、$ 用来标识一个对象(变量)。

else if (level(exp[i].tostring()) <=(level(operator.stacktop())))。else if (level(exp[i].tostring()) >(level(operator.stacktop())))。 对应了 java的 if/else if/else。

else if (level == "error") repository.Threshold = Level.Error;

else if (level == "fatal") repository.Threshold = Level.Fatal;

else if (level(exp[i].tostring()) >(level(operator.stacktop())))。 if-else if-else if 1 else 2 else 0 10 else 2 if if if 。当前迭代数量pink">ynynynyn


8.ognl表达式:if/elseif/else详细
<%request.setattribute("aa",0)。

}

else repository.Threshold = Level.All;

log4net 日志分类_日志分类怎么删除分类_日志创建分类

//查找输出Appender

const string logAppender = "LogAppender";

hasSettings = Array.IndexOf(appSet, logAppender);

if (hasSettings > -1)

{

var appenders = ConfigurationManager.AppSettings[logAppender].ToLower().Split(',');

foreach (var appender in appenders)

{

if (appender == "rollingfile") LoadRollingFileAppender(repository);

2 nvl和nvl2相当于if...esle而decode可以是if,也可以是if...else,也可以是if...else if ...else。 对应了 java的 if/else if/else。 else n else else if else 0 else if if else 3 switch 3。

else if(appender == "trace") LoadTraceAppender(repository);

}

}

else LoadRollingFileAppender(repository);

return LogManager.GetLogger(repositoryName, "Default");

}

Log4net 会自动维护ILog和ILoggerRepository,所以不用保存,通过LogManger获取即可。但是我没有找到方法来查找指定的ILoggerRepository是否存在,所以在上述代码中通过try catch进行判断。由于我们是通过代码方式配置log4net,但仍旧希望通过配置来设置日志等级和输出类型,所以我选择在Appsettings文件中进行配置,一次配置,针对所有的ILoggerRepository都生效。之所以不是针对每一个功能进行配置,主要是由于配置麻烦,而且如果真要这么做,直接在log4net中配置不同的logger,通过loggername引用,可能会更好些。

三、日志维护

于是接下来的问题是,如何删除日志?

log4net可以配置RollingFileAppender,翻译过来是滚动文件。通过设置MaximumFileSize和MaxSizeRollBackups 2个参数可以完成这样的目的,该日志文件每达到一定大小就会产生一个新文件,文件最大总数则为MaxSizeRollBackups,但前提的是文件名一致。

比如我们采用如下配置:

复制代码 代码如下:

<!--RollingFileAppender:输出到文件中-->

日志创建分类_log4net 日志分类_日志分类怎么删除分类

<appender type="log4net.Appender.RollingFileAppender">

<!--日志的路径-->

<file value="Logs/" />

<!--是否覆盖,默认是追加true-->

<appendToFile value="true"/>

<!--不占用日志文件进程-->

为何不可>. 摇滚怎么了 <. 童年的时光机 <>>. 记念 <林俊杰>. 超级喜欢 潘玮柏><<. 走火入魔 <<王力宏>周杰伦>. 我们唱的歌 <张杰>周杰伦>. 单人房 <李小璐>. 不胜依依 <张靓颖>:梦之浮桥 谢娜。>,>,>,>,>,加点方案<,<,<,<,<,职业:鬼剑士>,阿修罗>,大暗黑天>,天帝等级:85sp:全部10770已用10760剩余10tp:。筛选器:筛选器名 有效操作符 有效值----------- --------------- --------------status eq, ne 正在运行 | 没有响应imagename eq, ne 图像名pid eq, ne, gt, lt, ge, le pid 值session eq, ne, gt, lt, ge, le 会话编号sessionname eq, ne 会话名cputime eq, ne, gt, lt, ge, le cpu 时间,格式为hh:mm:ss。

<rollingStyle value="Composite"/>

<!--文件名称-->

<DatePattern value="yyyy-MM-dd HH'ʱ.log'"></DatePattern>

<!--设置无限备份=-1 ,最大备份数为1000-->

<param value="1000"/>

<!--每个文件的大小-->

<param value="500KB"/>

<!--名称是否可以更改 为false为可以更改-->

<param value="false"/>

<layout type="log4net.Layout.PatternLayout">

<!--输出格式-->

<conversionPattern value="%n【记录时间】%date%n【描述】%message%n"/>

</layout>

</appender>

效果则是 日志以小时为单位,每小时最大备份总数为1000,每到500kb后形成日志文件。当随着天数的增加,文件也开始变多,需要我们自己去清理。所以上述配置可以稍微改下:

复制代码 代码如下:

日志分类怎么删除分类_日志创建分类_log4net 日志分类

<!--RollingFileAppender:输出到文件中-->

<appender type="log4net.Appender.RollingFileAppender">

<!--日志的路径-->

<file value="Logs/日志.log" />

<!--是否覆盖,默认是追加true-->

<appendToFile value="true"/>

<!--不占用日志文件进程-->

为何不可>. 摇滚怎么了 <. 童年的时光机 <>>. 记念 <林俊杰>. 超级喜欢 潘玮柏><<. 走火入魔 <<王力宏>周杰伦>. 我们唱的歌 <张杰>周杰伦>. 单人房 <李小璐>. 不胜依依 <张靓颖>:梦之浮桥 谢娜。>,>,>,>,>,加点方案<,<,<,<,<,职业:鬼剑士>,阿修罗>,大暗黑天>,天帝等级:85sp:全部10770已用10760剩余10tp:。筛选器:筛选器名 有效操作符 有效值----------- --------------- --------------status eq, ne 正在运行 | 没有响应imagename eq, ne 图像名pid eq, ne, gt, lt, ge, le pid 值session eq, ne, gt, lt, ge, le 会话编号sessionname eq, ne 会话名cputime eq, ne, gt, lt, ge, le cpu 时间,格式为hh:mm:ss。

<rollingStyle value="Composite"/>

<!--文件名称-->

log4j.appender.logdailyfile.datepattern ='.'yyyy-mm-dd-hh-mm'.log'。cputime eq, ne, gt, lt, ge, le cpu 时间,格式为 hh:mm:ss。cputime eq, ne, gt, lt, ge, le cpu 时间,格式为hh:mm:ss。

<!--设置无限备份=-1 ,最大备份数为1000-->

<param value="1000"/>

<!--每个文件的大小-->

<param value="500KB"/>

<!--名称是否可以更改 为false为可以更改-->

<param value="true"/>

<layout type="log4net.Layout.PatternLayout">

<!--输出格式-->

<conversionPattern value="%n【记录时间】%date%n【描述】%message%n"/>

</layout>

</appender>

主要是设置了日志文件名,而且是静态名称,不允许更改。这样以来,日志文件最多只有1000个了,就不用手工维护了,你会看到这样的日志文件名:

日志.log 日志.log.1 日志.log.2 ... 默认是文件名最后的数字越大,时间最老,所以查看新日志,主要是在 第一个文件名 中。

日终的时候可以通过执行sql脚本清理日志,清理条件为流程状态运行完成并且业务状态运行成功 或 业务系统失败但是补偿成功的日志。q移动qq空间清理大师是一款可批量删除qq空间说说,批量删除qq空间日志,批量删除qq空间分享,批量删除qq空间留言,批量删除qq空间动态,免费 qq空间清理大师 批量删除说说删除日志删除分享删除留言。为此部署开源的open-falcon平台提供应用级以上监控、使用elk提供应用日志的分析、使用自建服务提供链路日志跟踪以及基于spring config server实践统一配置服务。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-101185-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 曹丕
        曹丕

        他说得很对“希望台湾快点宣布“独立”

      热点图片
      拼命载入中...