init lserp cs 5.0

This commit is contained in:
cyf
2026-07-10 15:25:05 +08:00
commit 90f3fda86a
3799 changed files with 976868 additions and 0 deletions
@@ -0,0 +1,69 @@
using System;
using System.Collections.Generic;
using System.Text;
using Zhaizj.Framework.Config.DotNetConfig;
using System.Configuration;
namespace Zhaizj.Framework.Data.Config
{
/// <summary>
/// 数据库配置方式
/// </summary>
/// <remarks>
/// 配置文件格式和说明:
/// <code>
/// <configSections>
/// <sectionGroup name="Zhaizj.Config" type="Zhaizj.Framework.Config.GroupHandler,Zhaizj.Framework">;
/// <section name="DataBase" type="Zhaizj.Framework.Data.Config.SectionHandler, Zhaizj.Framework"/>;
/// </sectionGroup>
/// </configSections>
/// <Zhaizj.Config>
/// <log>
/// <log/>
/// <Zhaizj.Config/>
/// ......
/// </code>
/// </remarks>
public class SectionLogHandler : SectionBaseHandler<SectionLogHandler>
{
/// <summary>
/// 配置日志级别
/// </summary>
[ConfigurationProperty("LogLevel", DefaultValue = "info")]
public string LogLevel
{
get { return (string)this["LogLevel"]; }
}
/// <summary>
/// 配置日志路径
/// </summary>
[ConfigurationProperty("LogFile", DefaultValue = "yyyyMMdd")]
public string LogFile
{
get { return (string)this["LogFile"]; }
}
/// <summary>
/// 配置日志路径
/// </summary>
[ConfigurationProperty("LogPath", DefaultValue = "log")]
public string LogPath
{
get { return (string)this["LogPath"]; }
}
/// <summary>
/// 读取配置文件
/// </summary>
/// <returns></returns>
public string GetLogConfig()
{
StringBuilder tagData = new StringBuilder();
tagData.AppendLine("logLevel : " + LogLevel);
tagData.AppendLine("logFile : " + LogFile);
tagData.AppendLine("logPath : " + LogPath);
return tagData.ToString();
}
}
}
@@ -0,0 +1,88 @@
using System;
using System.Diagnostics;
using Zhaizj.Framework;
namespace Zhaizj.Framework.Log {
/// <summary>
/// 文件日志工具,所有日志会被写入磁盘
/// </summary>
internal class FileLogger : ILog {
private LogLevel _levelSetting;
private LogMessage _msg;
public FileLogger() {
_levelSetting = LogConfig.Instance.Level;
_msg = new LogMessage();
}
public void Debug( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "debug";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Debug) {
LoggerUtil.WriteFile( _msg );
}
}
public void Info( String message ) {
Boolean isSql = false;
if (message.StartsWith( LoggerUtil.SqlPrefix )) {
isSql = true;
message = strUtil.TrimStart( message, LoggerUtil.SqlPrefix );
}
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "info";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Info) {
LoggerUtil.WriteFile( _msg );
}
if (isSql) LoggerUtil.LogSqlCount();
}
public void Warn( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "warn";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Warn) {
LoggerUtil.WriteFile( _msg );
}
}
public void Error( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "error";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Error) {
LoggerUtil.WriteFile( _msg );
}
}
public void Fatal( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "fatal";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Fatal) {
LoggerUtil.WriteFile( _msg );
}
}
public String TypeName {
set {
_msg.TypeName = value;
}
}
}
}
+19
View File
@@ -0,0 +1,19 @@
using System;
namespace Zhaizj.Framework {
/// <summary>
/// ÈÕÖ¾½Ó¿Ú
/// </summary>
public interface ILog {
void Debug( String message );
void Info( String message );
void Warn( String message );
void Error( String message );
void Fatal( String message );
String TypeName { set; }
}
}
+17
View File
@@ -0,0 +1,17 @@
using System;
namespace Zhaizj.Framework.Log {
/// <summary>
/// 日志信息接口
/// </summary>
public interface ILogMsg {
String LogLevel { get; set; }
DateTime LogTime { get; set; }
String Message { get; set; }
String TypeName { get; set; }
}
}
+154
View File
@@ -0,0 +1,154 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using Zhaizj.Framework.Web;
using System.IO;
namespace Zhaizj.Framework.Log
{
/// <summary>
/// 日志配置文件,默认配置文件在 /framework/config/log.config,日志文件在 /framework/log/log.txt 中
/// </summary>
public class LogConfig
{
/// <summary>
/// 日志配置信息(全局缓存)
/// <remarks>
/// logLevel 的值(不区分大小写)none, debug, info, warn, error, fatal, all
/// logFile 和 logProvider 通常不用填写
/// </remarks>
/// <example>
/// 配置文件的格式(一行一条配置,键值之间用冒号分开)。
/// <code>
/// logLevel : info
/// logFile : log/log.txt
/// logProvider : Zhaizj.Framework.Log.FileLogger
/// </code>
/// </example>
/// </summary>
public static readonly LogConfig Instance = new LogConfig();
/// <summary>
/// 日志配置内容
/// </summary>
public Dictionary<String, String> dic = new Dictionary<String, String>();
/// <summary>
/// 构造函数初始化
/// </summary>
private LogConfig()
{
String absPath = getConfigAbsPath();
dic = cfgHelper.Read(absPath);
this.FilePath = getFilePath(dic);
this.Level = getLevel(dic);
this.LoggerImpl = getLoggerImpl(dic);
}
/// <summary>
/// 获取日志级别
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
private LogLevel getLevel(Dictionary<String, String> dic)
{
String level;
dic.TryGetValue("logLevel", out level);
if (strUtil.IsNullOrEmpty(level)) return getDefaultLevel();
try
{
return (LogLevel)Enum.Parse(typeof(LogLevel), level, true);
}
catch { return getDefaultLevel(); }
}
/// <summary>
/// 获取默认级别
/// </summary>
/// <returns></returns>
private static LogLevel getDefaultLevel()
{
return LogLevel.None;
}
private void loadDefault()
{
this.Level = LogLevel.Debug;
this.FilePath = getAbsoluteLogPath(getFilePath(dic));
}
/// <summary>
/// 获取配置文件路径
/// </summary>
/// <returns></returns>
private static String getConfigAbsPath()
{
String absolutePath = PathHelper.Map(strUtil.Join(cfgHelper.ConfigRoot, "log.config"));
if (!File.Exists(absolutePath))
{
absolutePath = null;
}
return absolutePath;
}
/// <summary>
/// 日志输出配置
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
private static String getFilePath(Dictionary<String, String> dic)
{
String filePath;
String logPath;
dic.TryGetValue("logFile", out filePath);
dic.TryGetValue("logPath", out logPath);
filePath = getDefaultLogPath(filePath, logPath);
return getAbsoluteLogPath(filePath);
}
/// <summary>
/// 日志输出路径修改
/// </summary>
/// <param name="filePath"></param>
/// <param name="logdir"></param>
/// <returns></returns>
private static String getDefaultLogPath(string filePath, string logdir)
{
if (!Directory.Exists(logdir))
{
Directory.CreateDirectory(logdir);
}
string logPath = logdir + "/" + DateTime.Now.ToString(filePath) + ".txt";
return cfgHelper.FrameworkRoot + logPath;
}
private static String getAbsoluteLogPath(String path)
{
if (path.StartsWith(cfgHelper.FrameworkRoot) == false)
path = strUtil.Join(cfgHelper.FrameworkRoot, path);
return PathHelper.Map(path);
}
private static String getLoggerImpl(Dictionary<String, String> dic)
{
String logProvider;
dic.TryGetValue("logProvider", out logProvider);
return logProvider;
}
//---------------------------------------------------------------------------------------------
/// <summary>
/// 记录的层次,不区分大小写,有 none, debug, info, warn, error, fatal, all 这几种可选
/// </summary>
public LogLevel Level { get; set; }
/// <summary>
/// 日志文件存储的路径
/// </summary>
public String FilePath { get; set; }
/// <summary>
/// 日志记录工具,默认是 FileLogger
/// </summary>
public String LoggerImpl { get; set; }
}
}
@@ -0,0 +1,17 @@
using System;
namespace Zhaizj.Framework.Log {
public enum LogLevel {
None,
Fatal,
Error,
Warn,
Info,
Debug,
All
}
}
@@ -0,0 +1,86 @@
using System;
using System.Reflection;
using System.Web;
using Zhaizj.Framework.IO;
using Zhaizj.Framework.Log;
using Zhaizj.Framework.Web;
namespace Zhaizj.Framework {
/// <summary>
/// 日志管理对象,通常用于获取日志工具
/// </summary>
/// <example>
/// 一般在类的第一行定义
/// <code>
/// private static readonly ILog logger = LogManager.GetLogger( typeof( ObjectBase ) );
/// </code>
/// 然后可以在其他方法中使用
/// <code>
/// logger.Info( "your message" );
/// </code>
/// </example>
public class LogManager {
private LogManager() {
}
/// <summary>
/// 获取一个日志工具
/// </summary>
/// <param name="type">对象类型</param>
/// <returns>返回日志工具</returns>
public static ILog GetLogger( Type type ) {
return GetLogger( type.FullName );
}
/// <summary>
/// 获取一个日志工具
/// </summary>
/// <param name="typeName">对象类型</param>
/// <returns>返回日志工具</returns>
public static ILog GetLogger( String typeName ) {
ILog log = getLogger();
log.TypeName = typeName;
return log;
}
private static ILog getLogger() {
if (LogConfig.Instance.Level == LogLevel.None)
return new NullLogger();
if (strUtil.IsNullOrEmpty( LogConfig.Instance.LoggerImpl ))
return new FileLogger();
ILog log = null;
String loggerImpl = LogConfig.Instance.LoggerImpl;
if (strUtil.HasText( loggerImpl )) {
String[] strArray = loggerImpl.Split( new char[] { ',' } );
if (strArray.Length == 1) {
Type type = Type.GetType( strArray[0].Trim() );
if (type != null) {
log = rft.GetInstance( type ) as ILog;
}
return log;
}
if (strArray.Length == 2) {
log = Assembly.Load( strArray[1].Trim() ).CreateInstance( strArray[0].Trim() ) as ILog;
}
}
return log;
}
/// <summary>
/// 立即将日志内容写入磁盘(在 web 中,日志是在页面请求结束的时候才一起写入到磁盘的)
/// </summary>
public static void Flush() {
if (!SystemInfo.IsWeb) return;
LoggerUtil.Flush();
}
}
}
@@ -0,0 +1,37 @@
using System;
namespace Zhaizj.Framework.Log {
/// <summary>
/// ÈÕÖ¾ÐÅÏ¢
/// </summary>
public class LogMessage : ILogMsg {
private String _level;
private DateTime _logTime;
private String _message;
private String _typeName;
public String LogLevel {
get { return _level; }
set { _level = value; }
}
public DateTime LogTime {
get { return _logTime; }
set { _logTime = value; }
}
public String Message {
get { return _message; }
set { _message = value; }
}
public String TypeName {
get { return _typeName; }
set { _typeName = value; }
}
}
}
+48
View File
@@ -0,0 +1,48 @@
using System;
using Zhaizj.Framework;
using Zhaizj.Framework.Data;
namespace Zhaizj.Framework.Log {
/// <summary>
/// 日志信息(尚未实现,请勿使用)
/// </summary>
internal class LogMsg : ILogMsg {
private int _id;
private String _level;
private DateTime _logTime;
private String _message;
private String _typeName;
public void Insert() {
}
public int Id {
get { return _id; }
set { _id = value; }
}
public String LogLevel {
get { return _level; }
set { _level = value; }
}
public DateTime LogTime {
get { return _logTime; }
set { _logTime = value; }
}
public String Message {
get { return _message; }
set { _message = value; }
}
public String TypeName {
get { return _typeName; }
set { _typeName = value; }
}
}
}
@@ -0,0 +1,81 @@
using System;
using Zhaizj.Framework;
namespace Zhaizj.Framework.Log {
/// <summary>
/// 存储到数据库的日志(尚未实现,请勿使用)
/// </summary>
internal class LoggerForDB : ILog {
private LogLevel _levelSetting;
private LogMsg _msg;
public LoggerForDB() {
_levelSetting = LogConfig.Instance.Level;
_msg = new LogMsg();
}
public void Debug( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "debug";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Debug) {
_msg.Insert();
}
}
public void Info( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "info";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Info) {
_msg.Insert();
}
}
public void Warn( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "warn";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Warn) {
_msg.Insert();
}
}
public void Error( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "error";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Error) {
_msg.Insert();
}
}
public void Fatal( String message ) {
_msg.LogTime = DateTime.Now;
_msg.Message = message;
_msg.LogLevel = "fatal";
System.Diagnostics.Debug.Write( LoggerUtil.GetFormatMsg( _msg ) );
if (_levelSetting >= LogLevel.Fatal) {
_msg.Insert();
}
}
public String TypeName {
set { _msg.TypeName = value; }
}
}
}
@@ -0,0 +1,106 @@
using System;
using System.IO;
using System.Web;
using System.Collections.Generic;
using System.Text;
using Zhaizj.Framework;
using Zhaizj.Framework.IO;
using Zhaizj.Framework.ORM;
using Zhaizj.Framework.Web;
namespace Zhaizj.Framework.Log {
/// <summary>
/// 日志处理工具
/// </summary>
public class LoggerUtil {
private static Object objLock = new object();
/// <summary>
/// sql 日志的前缀
/// </summary>
public static readonly String SqlPrefix = "sql=";
/// <summary>
/// 在 web 系统中,记录 sql 执行的次数
/// </summary>
public static void LogSqlCount() {
if (CurrentRequest.getItem( "sqlcount" ) == null) {
CurrentRequest.setItem( "sqlcount", 1 );
}
else {
CurrentRequest.setItem( "sqlcount", ((int)CurrentRequest.getItem( "sqlcount" )) + 1 );
}
}
/// <summary>
/// 将日志写入磁盘
/// </summary>
/// <param name="msg"></param>
public static void WriteFile( ILogMsg msg ) {
if (SystemInfo.IsWeb == false) {
writeFilePrivate( msg );
return;
}
StringBuilder sb = CurrentRequest.getItem( "currentLogList" ) as StringBuilder;
if (sb == null) {
sb = new StringBuilder();
CurrentRequest.setItem( "currentLogList", sb );
}
sb.AppendFormat( "{0} {1} {2} - {3} \r\n", msg.LogTime, msg.LogLevel, msg.TypeName, msg.Message );
}
private static void writeFilePrivate( ILogMsg msg ) {
String formatMsg = GetFormatMsg( msg );
writeContentToFile( formatMsg );
}
private static void writeContentToFile( String formatMsg ) {
String logFilePath = LogConfig.Instance.FilePath;
lock (objLock) {
if (Zhaizj.Framework.IO.File.Exists( logFilePath )) {
DateTime lastAccessTime = System.IO.File.GetLastWriteTime( logFilePath );
DateTime now = DateTime.Now;
if (cvt.IsDayEqual( lastAccessTime, now )) {
Zhaizj.Framework.IO.File.Append( logFilePath, formatMsg );
}
else {
String destFileName = getDestFileName( logFilePath );
Zhaizj.Framework.IO.File.Move( logFilePath, destFileName );
Zhaizj.Framework.IO.File.Write( logFilePath, formatMsg );
}
}
else {
if (Directory.Exists( Path.GetDirectoryName( logFilePath ) ) == false) {
Directory.CreateDirectory( Path.GetDirectoryName( logFilePath ) );
}
Zhaizj.Framework.IO.File.Write( logFilePath, formatMsg );
}
}
}
private static String getDestFileName( string logFilePath ) {
String ext = Path.GetExtension( logFilePath );
String pathWithoutExt = strUtil.TrimEnd( logFilePath, ext );
return pathWithoutExt + "_" + DateTime.Now.Subtract( TimeSpan.FromDays( 1 ) ).ToString( "yyyy.MM.dd" ) + ext;
}
public static String GetFormatMsg( ILogMsg logMsg ) {
return String.Format( "{0} {1} {2} - {3} \r\n", logMsg.LogTime, logMsg.LogLevel, logMsg.TypeName, logMsg.Message );
}
/// <summary>
/// 将所有日志即可写入磁盘
/// </summary>
internal static void Flush() {
StringBuilder sb = CurrentRequest.getItem( "currentLogList" ) as StringBuilder;
if (sb != null)
writeContentToFile( sb.ToString() );
}
}
}
@@ -0,0 +1,33 @@
using System;
using Zhaizj.Framework;
namespace Zhaizj.Framework.Log {
/// <summary>
/// ʹÓà null ģʽµÄÈÕÖ¾¹¤¾ß
/// </summary>
internal class NullLogger : ILog {
public void Debug( String message ) {
}
public void Info( String message ) {
}
public void Warn( String message ) {
}
public void Error( String message ) {
}
public void Fatal( String message ) {
}
public String TypeName {
set { }
}
}
}