public string logFile;
private int configLogLevel = ;
private Stream s = null;
StreamWriter sw = null; /// <summary>
/// 用log文件名初始化对象
/// </summary>
/// <param name="logFile"></param>
public WriteLog(string logFile)
{
this.logFile = logFile;
initFile();
} /// <summary>
/// 用log文件名和配置的log级别初始化对象
/// </summary>
/// <param name="logFile"></param>
/// <param name="configLevel"></param>
public WriteLog(string logFile,int configLevel)
{
this.logFile = logFile;
this.configLogLevel = configLevel;
initFile();
} ~WriteLog()
{
//析构函数,释放资源
//if (sw != null)
//{
// sw.Flush();
// sw.Close();
//}
//if (s != null)
//{
// s.Flush();
// s.Close();
//}
} /// <summary>
/// 初始化文件流
/// </summary>
private void initFile()
{
try
{
if (this.logFile == null || this.logFile == "") return; string path = "";
string fileName = "";
if (this.logFile.IndexOf("\\") >= )
{
path = this.logFile.Substring(,this.logFile.LastIndexOf("\\")+);
fileName = this.logFile.Substring(this.logFile.LastIndexOf("\\")+);
}
else if (this.logFile.IndexOf("/") >= )
{
path = this.logFile.Substring(, this.logFile.LastIndexOf("/")+);
fileName = this.logFile.Substring(this.logFile.LastIndexOf("/") + );
}
else
{
return;
}
string dateStr = DateTime.Now.ToString("yyyyMMdd");
path += dateStr;
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
fileName = path + "\\"+ fileName; if (File.Exists(fileName))
{
s = new FileStream(fileName, FileMode.Append, FileAccess.Write);
}
else
{
//CommonFunction.createDir(this.logFile.Substring(0, this.logFile.LastIndexOf(@"\")));
s = new FileStream(fileName, FileMode.CreateNew, FileAccess.Write);
s.Flush();
s.Close();
s = new FileStream(fileName, FileMode.Append, FileAccess.Write);
} sw = new StreamWriter(s, Encoding.Default);//创建Stream流,指定编码方式
//sw.AutoFlush = true;
}
catch (Exception ex)
{
throw ex;
}
} /// <summary>
/// 如果当前log级别小于配置设定的log级别时才将log内容写到日志文件中
/// </summary>
/// <param name="logLevel">当前log的级别</param>
/// <param name="configLevel">配置设定的log级别</param>
/// <param name="logContent">log内容</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public void log(int logLevel,int configLevel,string logContent)
{
//如果当前log级别小于配置设定的log级别时才将log内容写到日志文件中
if (logLevel < configLevel && sw != null && s != null)
{
try
{
lock (sw)
{
sw.WriteLine(DateTime.Now.ToString() + "." + DateTime.Now.Millisecond.ToString() + ":logLevel=" + logLevel + " ;configLevel=" + configLevel + " ;" + logContent);
sw.Flush();
//s.Flush();
}
}
catch (Exception ex)
{
ex.ToString();
} }
} /// <summary>
/// 如果当前log级别小于配置设定的log级别时才将log内容写到日志文件中
/// </summary>
/// <param name="logLevel">当前log的级别</param>
/// <param name="logContent">log内容</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public void log(int logLevel, string logContent)
{
//如果当前log级别小于配置设定的log级别时才将log内容写到日志文件中
if (logLevel < this.configLogLevel && sw != null && s != null)
{
try
{
lock (sw)
{
sw.WriteLine(DateTime.Now.ToString() + "." + DateTime.Now.Millisecond.ToString() + ":logLevel=" + logLevel + " ;configLevel=" + configLogLevel + " ;" + logContent);
sw.Flush();
//s.Flush();
}
}
catch (Exception ex)
{
ex.ToString();
} }
} /// <summary>
/// 如果当前log级别小于配置设定的log级别时才将log内容写到日志文件中
/// </summary>
/// <param name="logLevel">当前log的级别</param>
/// <param name="logContent">log内容</param>
/// <param name="method">log抛出调用的方法名</param>
//[MethodImpl(MethodImplOptions.Synchronized)]
public void log(int logLevel, string logContent,string methodName)
{
//如果当前log级别小于配置设定的log级别时才将log内容写到日志文件中
if (logLevel < this.configLogLevel && sw != null && s != null)
{
try
{
lock (sw)
{
sw.WriteLine(DateTime.Now.ToString() + "." + DateTime.Now.Millisecond.ToString() + ":logLevel=" + logLevel + " ;configLevel=" + configLogLevel + " ;method=" + methodName + ";content=" + logContent);
sw.Flush();
//s.Flush();
}
}
catch (Exception ex)
{
ex.ToString();
}
}
} public void close()
{
try
{
if (sw != null)
{
sw.Flush();
sw.Close();
}
if (s != null)
{
s.Flush();
s.Close();
}
}
catch (Exception ex)
{
ex.ToString();
}
}

程序中编写log日志的更多相关文章

  1. 注释和取消注释 程序中的log日志

    有点简单,但也是原创哦..亲测有效,期待指正. 更改了log多行的问题.. 例如//Log Util: 一.注释log    import java.io.BufferedReader;import ...

  2. 在C#中winform程序中应用nlog日志工具

    在C#中winform程序中应用nlog日志工具,配置文件简单应用. 文件名 nlog.config,请注意修改属性为"始终复制",发布时候容易遇到不存在文件的错误提示. 通过Nu ...

  3. java中关于log日志

    博:http://zhw2527.iteye.com/blog/1006302 http://zhw2527.iteye.com/blog/1099658 在项目开发中,记录错误日志是一个很有必要功能 ...

  4. Android教程-02 在程序中输出Log

    视频教程,建议采用超清模式观看 在Android中一般都用Log输出日志,常见的有5个不同的级别 Log.v() Log.d() Log.i() Log.w() Log.e() 当然很多程序员还比较习 ...

  5. 对于是否在一个python程序中编写函数的启发

    那我们到底是应该直接使用这些模块级别的函数呢,还是先编译一个模式对象,再调用模式对象的方法呢?这其实取决于正则表达式的使用频率,如果说我们这个程序只是偶尔使用到正则表达式,那么全局函数是比较方便的:如 ...

  6. 如何查看MapReduce执行的程序中的输出日志

    我们开发程序的时候,好多人都喜欢用sysout输出内容来查看运行情况.但是在MR程序里写了之后,却不知道去哪里查找,可以参考这篇文章. 第一种方法,我们可以在MapReduce任务查看页面找到这些日志 ...

  7. Android中对Log日志文件的分析[转]

    一,Bug出现了, 需要“干掉”它 bug一听挺吓人的,但是只要你懂了,android里的bug是很好解决的,因为android里提供了LOG机制,具体的底层代码,以后在来分析,只要你会看bug, a ...

  8. Mybatis中在log日志或控制台打印执行的sql

    最近在调试代码时,需要查看当前操作执行的sql,在日志里没查到,经过修改logback配置后成功,现记录如下:一.Mybatis版本是3.0.6(我正在用的版本)该版本只需要修改logback.xml ...

  9. ASP.NET Core 1.0 中使用 Log 日志配置

    https://github.com/aspnet/Logging https://docs.asp.net/en/latest/fundamentals/logging.html ASP.NET C ...

随机推荐

  1. Linux 学习笔记_12_文件共享服务_4_SSH

    SSH文件共享服务 一.ssh远程登录[一般的Linux系统都会默认安装并启用] 1.Linux上远程命令行登录:ssh 用户名@远程主机IP地址 常用选项: -2:表示SSH2,强制使用第二代SSH ...

  2. 【Android 应用开发】Android开发 使用 adb logcat 显示 Android 日志

    作者 : 万境绝尘  转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 ...

  3. (NO.00002)iOS游戏精灵战争雏形(五)

    完成了精灵自己移动之后,我们开始着手实现按住精灵拖动的功能. 要想处理触摸事件,我们需要做2件事: 1.在类的初始化中打开触摸接收属性 2.实现触摸处理回调方法 我们依次来做这2件事. 首先要搞清楚在 ...

  4. [Django] 单元测试小记

    从前很少写单元测试了,特别是web应用.最近不知不觉喜欢起来这个事情了,发现单元测试对于软件的模块,正交性有很大促进作用,因为函数,模块写的不合理,单元测试写起来就麻烦的多呀.公司的项目一直都是用Dj ...

  5. HTML5进阶(三)HBuilder实现软件自动升级(优化篇)

    HBuilder实现软件自动升级(优化篇) 前言 受前篇博客<HTML5进阶(二)HBuilder实现软件自动升级>(点击查看详情)的影响,测试过程中发现APP自动更新还是存在问题,第一次 ...

  6. 【嵌入式开发】C语言 结构体相关 的 函数 指针 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://www.hanshuliang.com/?post=30 . 结构体概述 : 结构体是 多个 变量的集合, 变量的类型可以不同; -- 可进行 ...

  7. gcc学习(二)[第二版]

    头文件与库文件 1.概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明. 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的.它 ...

  8. LeetCode之“树”:Balanced Binary Tree

    题目链接 题目要求: Given a binary tree, determine if it is height-balanced. For this problem, a height-balan ...

  9. 基于ARM-contexA9-Linux驱动开发:如何获取板子上独有的ID号

    每个CPU,都有它固定的ID号,ID号就是这个CPU唯一的标识,它可能隐含着CPU的生产日期,版本号,型号等等,那么,在我们的这款友善之臂Tiny4412的板子上,我的这个CPU的ID又是多少呢?从我 ...

  10. Unity Singleton 单例类(Unity3D开发之二十)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/47335197 ...